luogu 没有上司的舞会

来源:互联网 发布:视频大数据分析系统 编辑:程序博客网 时间:2024/05/13 02:30

题目

#include<cstdio>#include<algorithm>using namespace std;int dp[6005][2];    //dp[i][1]表示以 i 为根节点的子树中, 选取 i 的最优值;                    //dp[i][0]表示以 i 为根节点的子树中, 不取 i 的最优值.int dgr[6005],head[6005],pre[6005];void DP(int x){    for(int i=head[x];i;i=pre[i])    {        DP(i);        dp[x][0]+=max(dp[i][0],dp[i][1]);        dp[x][1]+=dp[i][0];    }}int main(){    int n,root;    scanf("%d",&n);    for(int i=1;i<=n;++i)    {        scanf("%d",&dp[i][1]);    }    int x,y;    scanf("%d%d",&x,&y);    while(x)    {        pre[x]=head[y];        head[y]=x;        ++dgr[x];        scanf("%d%d",&x,&y);    }    for(int i=1;i<=n;++i)        if(dgr[i]==0)        {            root=i;            break;        }    DP(root);    printf("%d\n",max(dp[root][0],dp[root][1]));    return 0;}