传送门

树上的dp,从底向上dp就行。

设dp[u][0]表示不选节点 u 的最大值,dp[u][1]表示选节点 u 的最大值。

则状态转移方程为:

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

dp[u][1] = ∑dp[v][0]  + val[u]

(节点v是节点u的孩子)

——代码

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #define MAXN 12001
 5
 6 using namespace std;
 7
 8 int n, cnt;
 9 int head[MAXN], to[MAXN], next[MAXN], val[MAXN], f[MAXN], r[MAXN], dp[MAXN][2];
10
11 inline void add(int x, int y)
12 {
13     to[cnt] = y;
14     next[cnt] = head[x];
15     head[x] = cnt++;
16 }
17
18 inline void dfs(int u)
19 {
20     int i, v;
21     dp[u][1] = val[u];
22     for(i = head[u]; i != -1; i = next[i])
23     {
24         v = to[i];
25         if(v != f[u])
26         {
27             f[v] = u;
28             dfs(v);
29             dp[u][0] += max(dp[v][1], dp[v][0]);
30             dp[u][1] += dp[v][0];
31         }
32     }
33 }
34
35 int main()
36 {
37     int i, x, y, pos;
38     scanf("%d", &n);
39     memset(head, -1, sizeof(head));
40     for(i = 1; i <= n; i++) scanf("%d", &val[i]);
41     for(i = 1; i < n; i++)
42     {
43         scanf("%d %d", &x, &y);
44         add(y, x);
45         r[x]++;
46     }
47     for(i = 1; i <= n; i++)
48         if(!r[i])
49         {
50             pos = i;
51             break;
52         }
53     dfs(pos);
54     printf("%d", max(dp[pos][0], dp[pos][1]));
55     return 0;
56 }

View Code

转载于:https://www.cnblogs.com/zhenghaotian/p/6807732.html

[luoguP1352] 没有上司的舞会(DP)相关推荐

  1. [LuoguP1352][FJSC]没有上司的舞会

    [LuoguP1352][FJSC]没有上司的舞会(Link) 现在你有一棵树,每一个点有一个点权\(R[i]\),如果选择了\(i\)点,那么\(i\)子树上的所有的点都不能选,现在要求选择若干个点 ...

  2. 树形DP入门(二叉苹果树+没有上司的舞会)

    树形dp学习笔记 - _Lancy - 博客园二叉苹果树 二叉苹果树 没有上司的舞会 二叉苹果树的处理可以说是非常模板了,正常容易联想到倒过来的数字三角形 for(int i=n;i>=1;i- ...

  3. 树形DP——没有上司的舞会

    树形DP--没有上司的舞会 题目 算法分析 Code 总结与反思 题目 Luogu:P1352 https://www.luogu.com.cn/problem/P1352 题目描述 某大学有 nnn ...

  4. 1380 没有上司的舞会

    1380 没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解 题目描述 Description Ural大学有N个职员,编号为1~N.他 ...

  5. 洛谷 P1352 没有上司的舞会

    洛谷 P1352 没有上司的舞会 Description 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会, ...

  6. codevs1380 没有上司的舞会

    1380 没有上司的舞会 题目描述 Description Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.每个职员有一个快 ...

  7. P2159 [SHOI2009]舞会(DP高精)

    P2159 [SHOI2009]舞会(DP&高精) n=200n=200n=200,考虑n3n^3n3的dpdpdp,但是本题没有模数,所以要高精度,且高精常数巨大,所以考虑n2n^2n2 的 ...

  8. layui树形父子不关联_DP专题7 | 没有上司的舞会 洛谷1352(树形DP)

    高能预警:这是一篇超过5分钟的学习文章,暑假了可以多学会 本篇继续咱们的DP专题,树形DP入门.动态规划每一个类型的DP都是深坑,期望童鞋们自己在这个系列的基础上多花时间进行拓展,学习愉快~ 在讨论树 ...

  9. 洛谷P1352 没有上司的舞会(树形DP水题)

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

  10. 洛谷 P1352 没有上司的舞会(树形 DP)

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

最新文章

  1. C++:new 和 delete
  2. [css] 说出至少十条你理解的css规范
  3. 提高C++程序运行效率的10个简单方法
  4. python程序分析,用Python编写分析Python程序性能的工具的教程
  5. 脚本语言(确认补遗)
  6. Spring Boot Serverless 实战系列“架构篇”首发 | 光速入门函数计算
  7. GDAL源码剖析(六)之GDAL开发及其调试
  8. zoj 3581 A Simple Test 模拟题
  9. 事务、事务的隔离级别、一致性
  10. java核心技术卷——学习笔记(一)
  11. 数学分析 隐函数定理及其应用(第18章)
  12. 【转】纯干货:PS高手完全自学宝典(原创文章)
  13. 4种Word文档解除密码保护的方法
  14. 【观察】百度搜索开放平台
  15. 美团 P2P 图书馆实践:5天时间1845册图书共享入库
  16. 【wireshark、MISC】将pcapng文件转为pcap文件,再用NetworkMiner分析流量包
  17. 视频教程-用Java从零开始开发一个物联网项目-物联网技术
  18. 113道C语言题目,超经典的~~~
  19. PySide2安装教程
  20. 用C++封装一个简单的英汉词典

热门文章

  1. Linux系统编程—— fork() 函数详解
  2. 设计模式---桥接模式(C++实现)
  3. Mac Idea批量删除空行
  4. 地面控制点的定义与作用_彩色透水混凝土路面在海绵城市建设中能起多大作用?...
  5. SQLserver添加主键
  6. 动态开辟内存_C/C++工程师你理解程序的内存分区吗?
  7. python自动生成报告_python实现自动生成oracle awr报告
  8. double除以int结果是int吗_游戏开发java中int可以用汉字吗?
  9. [渝粤教育] 中国地质大学 微积分(二) 复习题 (2)
  10. caffe之 Blob、Layer、Net