标签:
被坑。。。hdu都是多组数据读入的
----------------------------------------------------------------------------------------------
#include<cstdio>
#include<cstring>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
#define rep(i,n) for(int i=1;i<=n;i++)
#define clr(x,c) memset(x,c,sizeof(x))
int read(){
int x=0;
char c=getchar();
int f=1;
while(!isdigit(c)){
if(c==‘-‘) f=-1;
c=getchar();
}
while(isdigit(c)){
x=x*10+c-‘0‘;
c=getchar();
}
return x*f;
}
vector<int>e[6005];
int w[6005],v[6005],f[6005][2];
void dp(int x){
for(int i=0;i<e[x].size();i++){
dp(e[x][i]);
f[x][1]+=f[e[x][i]][0];
f[x][0]+=max(f[e[x][i]][0],f[e[x][i]][1]);
}
f[x][1]+=w[x];
return ;
}
int main(){
int n;
while(scanf("%d",&n)==1){
rep(i,n) e[i].clear();
clr(v,0);clr(f,0);
rep(i,n){
w[i]=read();
}
int s,t;
while(scanf("%d%d",&s,&t)==2&&s&&t){
e[t].push_back(s);
v[s]=1;
}
rep(i,n) if(v[i]==0) s=i;
/*rep(i,n) {
printf("%d\n",i);
for(int j=0;j<e[i].size();j++)
printf("%d ",e[i][j]);
printf("\n");
}
printf("%d\n",s);*/
dp(s);
printf("%d\n",max(f[s][0],f[s][1]));}
return 0;
}
----------------------------------------------------------------------------------------------
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 7559 Accepted Submission(s): 3315
标签:
原文地址:http://www.cnblogs.com/fighting-to-the-end/p/5049271.html