90求助
查看原帖
90求助
292069
洋本羊楼主2021/7/17 19:40
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int n,t,d[6001],h[6001],cnt,head[6001],f[6001][2];
struct Edge
{
    int nxt,to,val;
}edge[6001];
void ins(int a,int b)
{
    edge[++cnt].nxt=head[a];
    edge[cnt].to=b;
    head[a]=cnt;
}
void dfs(int x)
{
    for(int i=head[x];i;i=edge[i].nxt)
    {
        int j=edge[i].to;
        dfs(j);
        f[x][0]+=max(f[j][1],f[j][0]);
        f[x][1]+=f[j][0];
    }
    f[x][1]+=h[x];
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>h[i];
    for(int i=1;i<=n;i++)
    {
        int x,y;
        cin>>x>>y;
        d[x]++;
        if(x!=0&&y!=0)
            ins(y,x);
    }
    for(int i=1;i<=n;i++)
        if (d[i]==0) 
            t=i;
    dfs(t);
    printf("%d",max(f[t][0],f[t][1]));
}

第五个点wa了

2021/7/17 19:40
加载中...