题目大意:一棵树,每个节点都带权。从中取出一些节点,并且子节点不能与父节点同时取,求能取得的最大值。

题目分析:定义状态dp(u,0/1)表示u点不取/取。则状态转移方程为:

dp(u,1)=sum(dp(v,0))

dp(u,0)=sum(max(dp(v,1),dp(v,0)))

其中,v为u的子节点。

代码如下:

  1. # include<iostream>
  2. # include<cstdio>
  3. # include<vector>
  4. # include<cstring>
  5. # include<algorithm>
  6. using namespace std;
  7.  
  8. const int N=1005;
  9.  
  10. int n,w[N*6];
  11. int dp[N*6][2];
  12. bool flag[N*6];
  13. vector<int>e[N*6];
  14.  
  15. void init()
  16. {
  17. memset(flag,false,sizeof(flag));
  18. for(int i=1;i<=n;++i){
  19. scanf("%d",w+i);
  20. e[i].clear();
  21. }
  22. int a,b;
  23. while(scanf("%d%d",&a,&b)&&(a+b))
  24. {
  25. e[b].push_back(a);
  26. flag[a]=true;
  27. }
  28. }
  29.  
  30. void dfs(int u)
  31. {
  32. dp[u][1]=w[u];
  33. dp[u][0]=0;
  34. for(int i=0;i<e[u].size();++i){
  35. int v=e[u][i];
  36. dfs(v);
  37. dp[u][1]+=dp[v][0];
  38. dp[u][0]+=max(dp[v][1],dp[v][0]);
  39. }
  40. }
  41.  
  42. void solve()
  43. {
  44. int ans=0;
  45. for(int i=1;i<=n;++i){
  46. if(flag[i]) continue;
  47. dfs(i);
  48. ans+=max(dp[i][1],dp[i][0]);
  49. }
  50. printf("%d\n",ans);
  51. }
  52.  
  53. int main()
  54. {
  55. while(~scanf("%d",&n))
  56. {
  57. init();
  58. solve();
  59. }
  60. return 0;
  61. }

  

HDU-1520 Anniversary party(树形DP)的更多相关文章

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

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

  2. HDU 1520 Anniversary party [树形DP]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题目大意:给出n个带权点,他们的关系可以构成一棵树,问从中选出若干个不相邻的点可能得到的最大值为 ...

  3. hdu oj 1520 Anniversary party(树形dp入门)

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

  4. POJ 2342 Anniversary party / HDU 1520 Anniversary party / URAL 1039 Anniversary party(树型动态规划)

    POJ 2342 Anniversary party / HDU 1520 Anniversary party / URAL 1039 Anniversary party(树型动态规划) Descri ...

  5. poj 2324 Anniversary party(树形DP)

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

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

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

  7. hdu 1520 Anniversary party(第一道树形dp)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Time Limit: 2000/1000 MS (Java ...

  8. HDU 1520 Anniversary party(DFS或树形DP)

    Problem Description There is going to be a party to celebrate the 80-th Anniversary of the Ural Stat ...

  9. TTTTTTTTTTT hdu 1520 Anniversary party 生日party 树形dp第一题

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

  10. hdu Anniversary party 树形DP,点带有值。求MAX

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

随机推荐

  1. FFT快速傅立叶变换的工作原理

    实数DFT,复数DFT,FFTFFT是计算DFT的快速算法,但是它是基于复数的,所以计算实数DFT的时候需要将其转换为复数的格式,下图展示了实数DFT和虚数DFT的情况,实数DFT将时域中N点信号转换 ...

  2. C++C++ 指针(二)--c++ 指针(二)--c++

    一.内存管理:new和delete 1.new操作符:从操作系统获得内存块,并返回该内存块的首地址. delete操作符:将new申请的内存返还给操作系统. 开始一个简单的例子: #include & ...

  3. C++指针(部分有误需修改)

    一.取地址运算符&(内存地址) C++编译的程序占用的内存分为以下几个部分: 1.栈区:由编译器自动分配释放 ,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.与其它分区不同 ...

  4. 面试题之spring

    一.Spring的理解 Spring是一个轻量级的容器,非侵入性的框架.最重要的核心概念是IOC,并提供AOP概念的实现方式,提供对持久层,事务的支持,对当前流行的一些框架(Struts,Hibern ...

  5. typedef定义函数类型或函数指针

    转载请标明出处: 最近在看redis的代码,发现了有关函数指针的部分,想把它记下来. 在redis中有类似下面的定义,利用typedef 定义了一个新的类型,这种类型是一个函数: typedef vo ...

  6. Apache Qpid Python 1.35.0 发布

    Apache Qpid Python 1.35.0 发布了,Apache Qpid (Open Source AMQP Messaging) 是一个跨平台的企业通讯解决方案,实现了高级消息队列协议.提 ...

  7. java equals 和hashcode

    1  如果不知道怎么重载hashcode, eclipse自动代码生成工具会帮助你生成,大概的思路是设定一个int prim,  然后根据各个成员的值或者hashcode值进行某种运算即可,具体什么运 ...

  8. button 浏览器兼容问题

    ie8和360出现的问题 应该加上type属性

  9. CSS 实现:父元素包含子元素,子元素垂直居中布局

    ☊[实现要求]:父元素包含子元素,子元素垂直居中布局 <div class="demo5"> <div class="child">A& ...

  10. PHP语言基础(标记、注释、变量、数组、常量、函数)

    PHP标记风格 1.xml风格(标准风格推荐使用) 代码如下: <?php  echo"这是xml风格的标记";  ?>  xml风格的标记是常用的标记,也是推荐使用的 ...