首页 > 其他 > 详细

HDU 1520 - Anniversary party

时间:2014-04-13 11:59:45      阅读:408      评论:0      收藏:0      [点我收藏+]

treedp, 选取节点使得不能具有父子节点的同时被选中并统计满足条件树的rating和最大值。

bubuko.com,布布扣
#include <cstdio>
using namespace std;

#define max(a,b) ((a)>(b)?(a):(b))

int rating[6005];
int tree[6005][6005], N;
int dp[6005][2];

void dfs(int n)
{
    dp[n][0] = 0, dp[n][1] = rating[n];
    for(int i=1; i<=tree[n][0]; ++i) {
        int child = tree[n][i];
        dfs(child);
        dp[n][0] += max(dp[child][1], dp[child][0]), dp[n][1] += dp[child][0];
    }
}


int main(void)
{
    while(scanf("%d", &N) > 0) {
        int i;
        for(i=0; i<N; ++i) {
            scanf("%d", &rating[i]);
            tree[i][0] = 0;
        }
        int root = 0;
        for(int L, K; scanf("%d%d", &L, &K), L || K; ) { 
            if ((tree[K-1][++tree[K-1][0]] = L-1) == root)
                root = K-1;
        }
        dfs(root);
        printf("%d\n", max(dp[root][0], dp[root][1]));
    }
    return 0;
}
bubuko.com,布布扣

 

HDU 1520 - Anniversary party,布布扣,bubuko.com

HDU 1520 - Anniversary party

原文:http://www.cnblogs.com/e0e1e/p/hdu_1520.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!