题目链接:http://poj.org/problem?id=2342

题目大意:在一个公司中,每个职员有一个快乐值ai,现在要开一个party,邀请了一个员工就不可能邀请其直属上司,同理邀请了一个人就不可以邀请其的直属员工,

问如何使得这个快乐值达到最大。

题解:对每个结点dp[i][0]表示不邀请这个员工,其子树达到的最大快乐值,dp[i][1]表示邀请i员工其子树达到的最大值。

dp[i][0]=(i的全部员工的max(dp[u][1],dp[u][0)相加,也就是其子员工来或不来的最大快乐值。

dp[i][1]=(i的全部员工的dp[u][0相加,也就是其子员工都不能不来的最大快乐值。

从大boss开始dp,最终结果就是max(dp[root][0],dp[root][1])

代码:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn = 6060; int n, happy[maxn], dp[maxn][2], p[maxn];
vector<int> sons[maxn];
bool vis[maxn]; void dfs(int u) {
if (vis[u]) return;
vis[u] = true;
dp[u][1] = happy[u], dp[u][0] = 0;
for (int i = 0; i < sons[u].size(); i ++) {
int v = sons[u][i];
if (v == p[u]) continue;
dfs(v);
dp[u][1] += dp[v][0];
dp[u][0] += max(dp[v][1], dp[v][0]);
}
} void test() {
for (int i = 1; i <= n; i ++) {
cout << "dp[" << i << "] = " << dp[i][1] << " , " << dp[i][0] << endl;
}
} int main() {
while (cin >> n) {
if (!n) break;
fill(p+1, p+1+n, -1);
fill(vis+1, vis+1+n, false);
for (int i = 1; i <= n; i ++) cin >> happy[i];
int a, b;
for (int i = 1; i < n; i ++) {
cin >> a >> b;
p[a] = b;
sons[b].push_back(a);
}
int root = 1;
while (p[root] != -1) root = p[root];
dfs(root);
cout << max(dp[root][1] , dp[root][0]) << endl;
// test();
}
return 0;
}

参考链接:http://www.cnblogs.com/seaupnice/p/9471700.html

POJ 2342 Anniversary party 树形DP基础题的更多相关文章

  1. POJ 2342 - Anniversary party - [树形DP]

    题目链接:http://poj.org/problem?id=2342 Description There is going to be a party to celebrate the 80-th ...

  2. poj 2342 Anniversary party 树形DP入门

    题目链接:http://poj.org/problem?id=2342 题意:一家公司有1 <= N <= 6 000个职工,现要组织一些职工参加晚会,要求每个职工和其顶头上司不能同时参加 ...

  3. poj 2324 Anniversary party(树形DP)

    /*poj 2324 Anniversary party(树形DP) ---用dp[i][1]表示以i为根的子树节点i要去的最大欢乐值,用dp[i][0]表示以i为根节点的子树i不去时的最大欢乐值, ...

  4. POJ 2342 &&HDU 1520 Anniversary party 树形DP 水题

    一个公司的职员是分级制度的,所有员工刚好是一个树形结构,现在公司要举办一个聚会,邀请部分职员来参加. 要求: 1.为了聚会有趣,若邀请了一个职员,则该职员的直接上级(即父节点)和直接下级(即儿子节点) ...

  5. POJ 2342 Anniversary party (树dp)

    题目链接:http://poj.org/problem?id=2342 有n个人,每个人有活跃值.下面n-1行u和v表示u的上司是v,有直接上司和下属的关系不能同时参加party,问你party最大的 ...

  6. HDU1520 Anniversary party 树形DP基础

    There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. The Un ...

  7. POJ Corn Fields 状态压缩DP基础题

    题目链接:http://poj.org/problem?id=3254 题目大意(名称什么的可能不一样,不过表达的意思还是一样的): 种玉米 王小二从小学一年级到现在每次考试都是班级倒数第一名,他的爸 ...

  8. poj 2342 && hdu 1520 树形dp

    题意:有n个人,接下来n行是n个人的价值,再接下来n行给出l,k说的是l的上司是k,这里注意l与k是不能同时出现的 链接:点我 dp[i][1] += dp[j][0], dp[i][0] += ma ...

  9. 树形DP基础题 HDU1520

    Anniversary party Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

随机推荐

  1. Java中复合赋值运算符自动进行强制类型转换

    public class Operation { public static void main(String[] args) { int num1 = 10; num1 = num1 / 2.2; ...

  2. 10分钟用Python爬取最近很火的复联4影评

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! <复仇者联盟4:终局之战>已经上映快三个星期了,全球票房破24亿美元,国内票房破40亿人民币. 虽然现在热度逐渐下降,但是我们还 ...

  3. mpvue开发小程序

    实例生命周期 beforeCreate created beforeMount mounted beforeUpdate updated activated deactivated beforeDes ...

  4. C# 清除sqlite密码

    C# 清除sqlite密码 .创建空的sqlite数据库. //数据库名的后缀你可以直接指定,甚至没有后缀都可以 //方法一:创建一个空sqlite数据库,用IO的方式 FileStream fs = ...

  5. 解决idea中maven默认jdk为1.5的问题 : IntelliJ IDEA 源值1.5已过时,将在未来所有版本中删除

    解决idea中maven默认jdk为1.5的问题 最近运行总是报警告: IntelliJ IDEA 源值1.5已过时,将在未来所有版本中删除 发现是jdk版本问题, 即使自己修改structure中的 ...

  6. 说明os,sys模块有什么不同

    官方解释: os: This module provides a portable way of usingoperating system dependent functionality. 翻译:提 ...

  7. eclipse快捷键及设置【转】

    1.Eclipse设置新建菜单初始项 windows-->Perspective-->Customize Perspective--> 2.Eclipse快捷键 1. ctrl+sh ...

  8. Image.FromFile 之后无法删除这个文件

    Image.FromFile 之后无法删除这个文件   pictrue图片是从文件加载的,现在想换张图片,更改之前要删除原有的文件,在删除原有的文件出现了异常 string path = @" ...

  9. 记录vsCode配置node开发环境

    环境:win10,idea:vscode 1:安装Visual Studio Code 下一步下一步.(很早之前就安装了). 2:安装node. http://nodejs.cn/download/  ...

  10. sass登陆页面实例

    sass登陆页面实例 一.总结 一句话总结: sass使用非常方便:使用就是将sass转化为css引入,并且动态监听让sass转化为css,可以很方便的所见即所得 1.sass安装? npm就可以按照 ...