| 比赛 | 
    20161116 | 
    评测结果 | 
    TATTTEEEEE | 
    | 题目名称 | 
    冰桥,升起来了! | 
    最终得分 | 
    10 | 
    | 用户昵称 | 
    BIRD | 
    运行时间 | 
    4.447 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    110.69 MiB  | 
    | 提交时间 | 
    2016-11-16 11:59:09 | 
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cmath>
using namespace std;
int A, B, K, ans = 0;
int pu[40005], pw[40005], con1[4005][4005], con2[4005][4005];
int sea(int begin,int side, int value){
	for(int i = 1; i <= (side == 2?A:B);i++){
		if(side ==1 && con1[begin][i]) return sea(i, 1, value + pu[i]); 
		if(side ==2 && con2[begin][i]) return sea(i, 2, value + pw[i]);
	}
	return value;
}
int main()
{
	freopen("meibridge.in","r",stdin);
	freopen("meibridge.out","w",stdout);
	scanf("%d%d%d", &A, &B, &K);
	for(int i = 1; i <= A; i++)
		scanf("%d", &pu[i]);
	for(int i = 1; i <= B; i++)
		scanf("%d", &pw[i]);
	for(int i = 1; i <= K; i++) {
		int bird, b1;
		scanf("%d%d", &bird, &b1);
		con1[bird][b1] = 1;
		con2[b1][bird] = 1; 
	}
	//保证冰桥没有重复
	for(int i = 1; i <= A; i++)
		ans = max(ans, sea(i, 1, pu[i]));
	for(int i = 1; i <= B; i++)
		ans = max(ans, sea(i, 2, pw[i]));
	printf("%d", ans);
	return 0;
}