zoukankan      html  css  js  c++  java
  • 洛谷1352没有上司的舞会——树型dp

    题目:https://www.luogu.org/problemnew/show/P1352

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int n,a[6005],l[6005],cnt,x,y,f[6005][2],sum;
    struct Node{
        int to,next;
    }edge[6005];
    bool b[6005],rd[6005];
    void add(int x,int y)
    {
        cnt++;
        edge[cnt].next=l[x];
        edge[cnt].to=y;
        l[x]=cnt;
        rd[y]=1;
    }
    void dfs(int cur)
    {
        if(b[cur])return;
        for(int i=l[cur];i;i=edge[i].next)
        {
            int v=edge[i].to;
            dfs(v);
            f[cur][0]+=max(f[v][0],f[v][1]);
            f[cur][1]+=f[v][0];
        }
        f[cur][1]+=a[cur];
        b[cur]=1;
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&x,&y);
            add(y,x);
        }
        for(int i=1;i<=n;i++)
        {
            dfs(i);
            if(!rd[i])sum=max(sum,sum+max(f[i][0],f[i][1]));
        }
        printf("%d",sum);
        return 0;
    }
  • 相关阅读:
    Storm
    Linux 网络配置
    .NET Remoting
    jwt
    new操作符
    元数据
    C# lock
    三十而立
    面试
    灯火
  • 原文地址:https://www.cnblogs.com/Narh/p/8443245.html
Copyright © 2011-2022 走看看