记录编号 |
351280 |
评测结果 |
AAWWWWWWWW |
题目名称 |
冰桥,升起来了! |
最终得分 |
20 |
用户昵称 |
jmisnal |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
0.145 s |
提交时间 |
2016-11-16 13:40:24 |
内存使用 |
2.77 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <vector>
#define ad 40005
#define ll long long
using namespace std;
int read()
{
int x=0;char ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x;
}
struct data{
int to,next;
}e[150000];
int head[81100],cnt;
void insert(int u,int v)
{
// cout<<u<<' '<<v<<endl;
e[++cnt].to=v;e[cnt].next=head[u];head[u]=cnt;
}
int A,B,m;
int v[81110];
ll f[81005];
bool mark[81004];
void dfs(int now,int fa)
{
if(mark[now])return;
mark[now]=1;
f[now]=(ll)v[now];
// cout<<now<<' '<<fa<<' '<<f[now]<<endl;
ll big=0;
for(int i=head[now];i;i=e[i].next)
{
int to=e[i].to;
dfs(to,now);
if(f[to]>big)big=f[to];
}
f[now]+=big;
}
int main()
{
// freopen("abcd.in","r",stdin);
freopen("meibridge.in","r",stdin);
freopen("meibridge.out","w",stdout);
A=read();B=read();m=read();
for(int i=1;i<=A;i++)
v[i]=read();
for(int i=1;i<=B;i++)
v[i+ad]=read();
for(int i=1;i<=m;i++)
{
int x,y;x=read();y=read();
// insert(x,y+ad);
// insert(y+ad,x);
if(x<= y+(A-B) )insert(x,y+ad);
else insert(y+ad,x);
}
// cout<<")_))"<<endl;
ll big=0;
for(int i=1;i<=A;i++)
{
dfs(i,0);
if(f[i]>big)big=f[i];
}
for(int i=1;i<=B;i++)
{
dfs(i+ad,0);
if(f[i+ad]>big)big=f[i+ad];
}
printf("%lld\n",big);
// cout<<f[1]<<' '<<f[2]<<' '<<f[3]<<endl;
return 0;
}