记录编号 351232 评测结果 WAWEWWEEEE
题目名称 冰桥,升起来了! 最终得分 10
用户昵称 Gravatar农场主 是否通过 未通过
代码语言 C++ 运行时间 0.541 s
提交时间 2016-11-16 12:14:54 内存使用 1.99 MiB
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<vector>
#include<map>
#define maxn 40000
using namespace std;
int w1[maxn],w2[maxn];
int d1[maxn],d2[maxn];
int dp[maxn]={0};
vector<int> f[maxn],t[maxn];
int n1,n2,m;
int ans=0;
void read(){
	scanf("%d%d%d",&n1,&n2,&m);
	int u,v;
	for (int i=1;i<=n1;i++){
		scanf("%d",&w1[i]);
	}
	for (int i=1;i<=n2;i++){
		scanf("%d",&w2[i]);
		dp[i]=w2[i];
		ans=max(dp[i],ans);
	}
	for (int i=1;i<=m;i++){
		scanf("%d%d",&u,&v);
		f[u].push_back(v);
		t[u].push_back(v);
	}
	for (int i=1;i<=n1;i++){
		sort(f[i].begin(),f[i].end());
	}
}
void work(){
	for (int i=1;i<=n1;i++){
		for (int j=0;j<f[i].size();j++){
			int from=f[i][j];
			for (int k=0;k<t[i].size();k++){
				int to=t[i][k];
				if (from<to){
					dp[to]=max(dp[from]+w1[i]+w2[to],dp[to]);
					ans=max(ans,dp[to]);
//					printf("d[%d]=%d; d[%d]=%d;\n",from,dp[from],to,dp[to]);
				}
//				printf("d[%d]=%d\n",to,dp[to]);
			}
			dp[from]=max(w1[i]+w2[from],dp[from]);
			ans=max(dp[from],ans);
		}
		for (int j=1;j<=n2;j++){
//			printf("d[%d]=%d; ",j,dp[j]);
		}
//		printf("\n");
	}
	printf("%d\n",ans);
}
int main(){
	freopen("meibridge.in","r",stdin);
	freopen("meibridge.out","w",stdout);
	read();
	/*printf("10 10 100\n");
	for (int i=1;i<=20;i++){
		printf("%d\n",1);
	}
	for (int i=1;i<=10;i++){
		for (int j=1;j<=10;j++){
			printf("%d %d\n",i,j);
		}
	}*/
	work();
}