比赛 20161116 评测结果 MMMMMMMMMM
题目名称 冰桥,升起来了! 最终得分 0
用户昵称 Hoohan(%Dalao) 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2016-11-16 11:53:09
显示代码纯文本
//meibridge.cpp
//By Hoohan
#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<vector>
#include<stack>
#include<queue>
using namespace std;

int a,b,k;
const int maxa=40002,maxb=40002,maxk=100010;
int va[maxa],vb[maxb];
int ansa[maxa],ansb[maxb];//向下走的最大值 
bool tu[maxa][maxb];

int bfs(int last,int now,bool side) //side=0 in A side=1 in B
{
//	cout<<"last,now,side"<<last<<' '<<now<<' '<<side<<endl;
	if(last==b && side==0 && now==a) return va[a];
	if(last==a && side==1 && now==b) return vb[b];
	if(side==0){
		for(int i=last+1;i<=b;i++)
		{
			if(tu[now][i]==1) 
			{
				ansa[now]=max(ansa[now],bfs(now,i,1)+va[i]);
			}
		}
		return ansa[now];
	}
	else{
		for(int i=last+1;i<=a;i++)
		{
			if(tu[i][now]==1) 
			{
				ansb[now]=max(ansb[now],bfs(now,i,0)+vb[i]);
			}
		}
		return ansb[now];
	}
}

int main()
{
	freopen("meibridge.in","r",stdin);
	freopen("meibridge.out","w",stdout);
	memset(ansa,0,sizeof(ansa));
	memset(ansb,0,sizeof(ansb));
//	memset(ansa,0,sizeof(ansa));
//	memset(ansa,0,sizeof(ansa));
	cin>>a>>b>>k;
	for(int i=1;i<=a;i++) cin>>va[i];
	for(int i=1;i<=b;i++) cin>>vb[i];
	/*
	for(int i=1;i<=a;i++) cout<<va[i]<<' ';
	cout<<endl;
	for(int i=1;i<=b;i++) cout<<vb[i]<<' ';
	cout<<endl;
	*/
	int x,y;
	for(int i=1;i<=k;i++)
	{
		cin>>x>>y;
		tu[x][y]=1;
	//	tu[y][x]=1;
	}
	for(int i=1;i<a;i++)
	bfs(0,i,0);
	for(int i=1;i<b;i++)
	bfs(0,i,1);
	sort(ansa+1,ansa+a+1);
	sort(ansb+1,ansb+b+1);
//	for(int i=1;i<=a;i++) cout<<ansa[i]<<' ';
//	cout<<endl;
//	for(int i=1;i<=b;i++) cout<<ansb[i]<<' ';
//	cout<<endl;
	cout<<max(ansa[a],ansb[b]);
	return 0; 
}