比赛 20161116 评测结果 AWWWWWWWWW
题目名称 冰桥,升起来了! 最终得分 10
用户昵称 jmisnal 运行时间 0.136 s
代码语言 C++ 内存使用 2.21 MiB
提交时间 2016-11-16 11:22:50
显示代码纯文本
#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;
//	cout<<now<<' '<<fa<<endl;	
	f[now]=(ll)v[now];	
	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];
	}
	printf("%lld\n",big);
//	cout<<f[1]<<' '<<f[2]<<' '<<f[3]<<endl;
	return 0;
}