• HDU 1520 Anniversary party 树形dp


    状态转移方程:

    dp[u][0] = max(dp[v][0],dp[v][1]);

    dp[u][1] += dp[v][0];

    #include <iostream>
    #include <cstdio>
    #include <vector>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    const int maxn = 6010;
    vector<int>tree[maxn];
    
    int rat[maxn],deg[maxn],dp[maxn][2];
    int max(int x,int y){
        return x > y ? x : y;
    }
    void dfs(int u){
        if(0 == tree[u].size())
        {
            dp[u][1] = rat[u];
            return ;
        }
        dp[u][1] += rat[u];
        for(int i = 0; i < tree[u].size(); i++){
            int v = tree[u][i];
            dfs(v);
            dp[u][0] += max(dp[v][0],dp[v][1]);
            dp[u][1] += dp[v][0];
        }
    }
    int main()
    {
       // freopen("in.txt","r",stdin);
        int n,l,k,root;
        while( ~scanf("%d",&n) ){
            for( int i = 1; i <= n; i++){
                tree[i].clear();
                scanf("%d",rat+i);
            }
            memset(deg,0,sizeof(deg));
            while( ~scanf("%d%d",&l,&k) , l||k){
                deg[l]++;
                tree[k].push_back(l);
            }
            memset(dp,0,sizeof(dp));
            for( root = 1; root <= n; root ++){
                if( !deg[root]){
                    dfs(root);
                    break;
                }
            }
            printf("%d
    ",max(dp[root][0],dp[root][1]));
        }
        return 0;
    }
    

      

  • 相关阅读:
    smm框架整合实现登录功能
    Java线程面试题
    JAVA面试题
    Linux基础命令
    Java面试题技术类
    Spring+Spring MVC+MyBatis框架集成
    C语言 编程练习22题
    C语言 基础练习40题
    Python3-socket网络知识储备
    python3-面向对象进阶(内置方法)
  • 原文地址:https://www.cnblogs.com/LUO257316/p/3222195.html
Copyright © 2020-2023  润新知