记录编号 |
351232 |
评测结果 |
WAWEWWEEEE |
题目名称 |
冰桥,升起来了! |
最终得分 |
10 |
用户昵称 |
农场主 |
是否通过 |
未通过 |
代码语言 |
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();
}