记录编号 351462 评测结果 AAAAAAAAAA
题目名称 冰桥,升起来了! 最终得分 100
用户昵称 GravatarsrO cwm Orz 是否通过 通过
代码语言 C++ 运行时间 0.196 s
提交时间 2016-11-16 16:15:45 内存使用 1.69 MiB
显示代码纯文本
/*
状态定义:fa[u]表示从B方v点转移到A方u点时最大的考察值之和 fb同
转移方程:fa[u]=max{fb[v]+wa[u]} fb[v]=max{fa[u]+wb[v]}
边界:fa[i]=wa[i],fb[i]=wb[i] 
*/
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;

const int maxn = 40010;
pair<int,int> edge[100003];
int A,B,K;
int wa[maxn],wb[maxn];
int fa[maxn],fb[maxn];
int ans;

int main(){
	#ifndef DEBUG
		string FileName="meibridge";
		freopen((FileName+".in").c_str(),"r",stdin);
		freopen((FileName+".out").c_str(),"w",stdout);
	#endif
	scanf("%d%d%d",&A,&B,&K);
	for(int i = 1; i <= A; i++)scanf("%d",&wa[i]),fa[i]=wa[i];
	for(int i = 1; i <= B; i++)scanf("%d",&wb[i]),fb[i]=wb[i];
	for(int i = 0; i < K; i++)scanf("%d%d",&edge[i].first,&edge[i].second);
	sort(edge,edge+K);
	for(int i = 0; i < K; i++){
		int u = edge[i].first;
		int v = edge[i].second;
		int ffa=fa[u];
		int ffb=fb[v];
		fa[u]=max(fa[u],ffb+wa[u]);
		fb[v]=max(fb[v],ffa+wb[v]); 
	}
	for(int i = 1; i <= A; i++)ans=max(ans,fa[i]);
	for(int i = 1; i <= B; i++)ans=max(ans,fb[i]);
	printf("%d",ans);
}