90pts RE 求助
查看原帖
90pts RE 求助
547908
NightTide楼主2021/8/26 22:13

第五个点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;
}
2021/8/26 22:13
加载中...