zoukankan      html  css  js  c++  java
  • POJ 2342 Anniversary party

    树形DP入门题。感觉负数的那些节点一定是不要选的,本着这个原则写了一发...AC了。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<ctime>
    #include<vector>
    #include<algorithm>
    using namespace std;
    
    const int maxn=6000+10;
    int N;
    int val[maxn];
    vector<int>tree[maxn];
    int tot[maxn];
    int dp[maxn][5];
    int ans;
    
    void init()
    {
        memset(tot,0,sizeof tot);
        for(int i=0;i<=N;i++) tree[i].clear();
        memset(dp,0,sizeof dp);
        ans=0;
    }
    
    void read()
    {
        for(int i=1;i<=N;i++)
        {
            scanf("%d",&val[i]);
            tree[i].clear();
        }
        while(1)
        {
            int u,v;
            scanf("%d%d",&u,&v);
            tree[v].push_back(u);
            tot[u]++;
            if(!u&&!v) break;
        }
    }
    
    void dfs(int now)
    {
        if(tree[now].size()==0)
        {
            dp[now][0]=0;
            dp[now][1]=max(val[now],0);
        }
    
        for(int i=0;i<tree[now].size();i++)
            dfs(tree[now][i]);
    
        int sum1=0;
        int sum2=0;
    
        for(int i=0;i<tree[now].size();i++){
            sum1=sum1+dp[tree[now][i]][0];
            sum2=sum2+max(dp[tree[now][i]][0],dp[tree[now][i]][1]);
        }
        sum1=sum1+val[now];
    
        dp[now][0]=sum2;
        dp[now][1]=max(dp[now][1],sum1);
    
    }
    
    void work()
    {
        for(int i=1;i<=N;i++)
            if(!tot[i]){
                dfs(i);
                ans=ans+max(dp[i][0],dp[i][1]);
            }
        printf("%d
    ",ans);
    }
    
    int main()
    {
        while(~scanf("%d",&N))
        {
            init();
            read();
            work();
        }
        return 0;
    }
  • 相关阅读:
    oracle 批量修改表名 字段为大写197
    身份证附件上传样例197
    npm 设置源197
    manajo常用命令197
    vue 父组件向子组件传参197
    将BAT文件注册为服务197
    teaweb — linux 系统资源监控
    glances — linux 系统资源监控
    emitter-Client
    urlencode编码 — 为什么要编码
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5181368.html
Copyright © 2011-2022 走看看