http://acm.hdu.edu.cn/showproblem.php?pid=1520

父节点和子节点不能同时选。

http://blog.csdn.net/woshi250hua/article/details/7641589

首先是建树,这个在之前的树形背包里有讲:http://www.cnblogs.com/qlky/p/5650783.html

因为这里没有指定根节点,所以可以建双向边,这样就可以从任一个点出发遍历

接下来是DP,状态转移方程:

dp[fa][0] += max(dp[son][0]+dp[son][1])

dp[fa][1] += dp[son][0]

  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <cmath>
  7. #include <algorithm>
  8. #include <stack>
  9. #include <queue>
  10. #include <cctype>
  11. #include <vector>
  12. #include <iterator>
  13. #include <set>
  14. #include <map>
  15. #include <sstream>
  16. using namespace std;
  17.  
  18. #define mem(a,b) memset(a,b,sizeof(a))
  19. #define pf printf
  20. #define sf scanf
  21. #define spf sprintf
  22. #define pb push_back
  23. #define debug printf("!\n")
  24. #define MAXN 20000+5
  25. #define MAX(a,b) a>b?a:b
  26. #define blank pf("\n")
  27. #define LL long long
  28. #define ALL(x) x.begin(),x.end()
  29. #define INS(x) inserter(x,x.begin())
  30. #define pqueue priority_queue
  31. #define INF 0x3f3f3f3f
  32.  
  33. #define ls (rt<<1)
  34. #define rs (rt<<1|1)
  35.  
  36. int n,m;
  37.  
  38. int ptr = ,head[MAXN],a[MAXN],dp[MAXN][],vis[MAXN];
  39.  
  40. struct node
  41. {
  42. int y,val,next;
  43. }tree[MAXN];
  44.  
  45. void add(int fa,int son)
  46. {
  47. tree[ptr].y = son;
  48. tree[ptr].next = head[fa];
  49. head[fa] = ptr++;
  50. }
  51.  
  52. void dfs(int root)
  53. {
  54. vis[root] = ;
  55. dp[root][] = a[root];
  56. dp[root][] = ;
  57. for(int i=head[root];i!=-;i=tree[i].next)
  58. {
  59. int y = tree[i].y;
  60. if(vis[y]) continue;
  61. dfs(tree[i].y);
  62. dp[root][] += max(dp[y][],dp[y][]);
  63. dp[root][] += dp[y][];
  64. }
  65. }
  66.  
  67. int main()
  68. {
  69. int i,j,t,kase=;
  70. while(~sf("%d",&n))
  71. {
  72. mem(a,);
  73. mem(vis,);
  74. mem(dp,);
  75. mem(head,-);
  76. ptr = ;
  77. for(i=;i<=n;i++) sf("%d",&a[i]);
  78. int x,y;
  79. while(sf("%d%d",&x,&y),x+y)
  80. {
  81. add(y,x);
  82. add(x,y);
  83. }
  84. dfs();
  85. pf("%d\n",max(dp[][],dp[][]));
  86.  
  87. }
  88. return ;
  89. }

hdu 1520 树形DP基础的更多相关文章

  1. HDU 1520 树形dp裸题

    1.HDU 1520  Anniversary party 2.总结:第一道树形dp,有点纠结 题意:公司聚会,员工与直接上司不能同时来,求最大权值和 #include<iostream> ...

  2. HDU 1520 树形DP入门

    HDU 1520 [题目链接]HDU 1520 [题目类型]树形DP &题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知 ...

  3. codevs 1380/HDU 1520 树形dp

    1380 没有上司的舞会 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 回到问题 题目描述 Description Ural大学有N个职员 ...

  4. hdu 1520 (树形DP)

    dp[i][0]表示i不参加 dp[i][1]表示i参加 简单的树形dp #include<stdio.h> #include<string.h> #define N 6100 ...

  5. HDU - 1520 树形DP入门题

    写了两种DP,第一种是按照自己习惯来xjb敲的,第二种参考别人 熟悉一下树形DP的套路 dp[i][]是维护i及以下的关系最优值的,所以我觉得两次DP记忆搜索之间不清-1应该是正确的(也就做了一次加法 ...

  6. 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 ...

  7. hdu 4123 树形DP+RMQ

    http://acm.hdu.edu.cn/showproblem.php? pid=4123 Problem Description Bob wants to hold a race to enco ...

  8. HDU 1520.Anniversary party 基础的树形dp

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

  9. hdu 1561 The more, The Better(树形dp,基础)

    The more, The Better Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

随机推荐

  1. 【bzoj2813】 奇妙的Fibonacci数列 线性筛

    Description Fibonacci数列是这样一个数列: F1 = 1, F2 = 1, F3 = 2 . . . Fi = Fi-1 + Fi-2 (当 i >= 3) pty忽然对这个 ...

  2. CAP理论中的P到底是个什么意思

    在CAP理论中,C代表一致性,A代表可用性(在一定时间内,用户的请求都会得到应答),P代表分区容错.这里分区容错到底是指数据上的多个备份还是说其它的 ? 我感觉分布式系统中,CAP理论应该是C和A存在 ...

  3. dsp之BF531笔记

    获得更多资料欢迎进入我的网站或者 csdn或者博客园 很久以前的BF531的笔记,觉得有用分享出来.摘自于open dsp 通用Gpio ADSP-BF53x 处理器上有16 个PF 接口,这些接口就 ...

  4. Python3之sys模块

    一.简介 sys模块用于提供对python解释器的相关操作. 二.常用函数 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.modules 返回系统导入的模块字段,key是模块 ...

  5. ubuntu 上安装支付宝安全插件不能运行问题

    1.在ubuntu的firefox浏览器中打开支付宝首页,不能登录,按照提示下载插件 aliedit.tar.gz 2.解压到某个文件夹下,有文件aliedit.sh, 运行 # sh aliedit ...

  6. 【Jquery】jquery刷新页面(局部及全页面刷新)

    下面介绍全页面刷新方法:有时候可能会用到window.location.reload()刷新当前页面.parent.location.reload()刷新父亲对象(用于框架)opener.locati ...

  7. JavaWeb学习笔记(二)—— Tomcat服务器

    一.Web开发概述 1.1 Web开发中常见的概念 [B/S系统和C/S系统] Brower/Server:浏览器 服务器 系统 ----- 网站 Client/Server:客户端 服务器 系统 - ...

  8. Kibana6.x.x源码分析--如何使用kibana的savedObjectType对象

    默认kibana插件定义了三种保存实体对象[savedObjectType],如下图所示: 要使用只需要在自己定义的app的uses属性中添加上:savedObjectTypes  即可,如下图所示: ...

  9. HDU - 4763 找出特殊规律的串

    在一个Text串中找出Pattern串E以满足EAEBE,A B可以是任意串 看一眼觉得woc好难,后来看一下样例AB为空也可以 找观察一下E既是前缀也是后缀,很容易联想到next 最优情况EEE,那 ...

  10. JS window,onload 与 $().read()

    JS:window.onload的使用介绍 .在body标签里面 .在JS语句调用 .同时调用多个函数 .JS调用多个函数 .自定义的函数多次调用 jquery $(document).ready() ...