第五个点RE,在其他OJ上评测都没有问题,求大佬帮忙
#include<bits/stdc++.h>
using namespace std;
struct edge{
int pre;
int to;
};
int n,root;
int dp[6010][2],fa[6010];
int head[6010],cnt;
edge e[15000];
void add(int u,int v){
e[++cnt].pre=head[u];
e[cnt].to=v;
head[u]=cnt;
}
void dfs(int now){
for(int i=head[now];i;i=e[i].pre){
dfs(e[i].to);
dp[now][1]+=dp[e[i].to][0];
dp[now][0]+=max(dp[e[i].to][0],dp[e[i].to][1]);
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&dp[i][1]);
}
while(true){
int x,y;
scanf("%d%d",&x,&y);
if(x==0&&y==0) break;
add(y,x);
fa[x]=y;
}
for(int i=1;i<=n;i++){
if(!fa[i]){
root=i;
break;
}
}
dfs(root);
printf("%d\n",max(dp[root][0],dp[root][1]));
return 0;
}