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

题意:一家公司有1 <= N <= 6 000个职工,现要组织一些职工参加晚会,要求每个职工和其顶头上司不能同时参加晚会,并且每个职工有一个enjoy值,问选取的职工的最大enjoy总和为多少?

输入N个职工各种的enjoy值,和L K表示K是L的顶头上司;

思路:建图之后DFS,dp[u][1] :u去时,以u为根的子树最大enjoy值,dp[u][0]:u不去时,以u为子树的enjoy值;

则dp[u][1] += dp[v][0]; u去则孩子节点一定不能去,

dp[u][0] += max(dp[v][0],dp[v][1]); u不去,v可去可不去。因为可能v的孩子节点的值很大,导致v不能去。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<string.h>
  5. #include<algorithm>
  6. #include<vector>
  7. #include<cmath>
  8. #include<stdlib.h>
  9. #include<time.h>
  10. #include<stack>
  11. #include<set>
  12. #include<map>
  13. #include<queue>
  14. using namespace std;
  15. #define rep0(i,l,r) for(int i = (l);i < (r);i++)
  16. #define rep1(i,l,r) for(int i = (l);i <= (r);i++)
  17. #define rep_0(i,r,l) for(int i = (r);i > (l);i--)
  18. #define rep_1(i,r,l) for(int i = (r);i >= (l);i--)
  19. #define MS0(a) memset(a,0,sizeof(a))
  20. #define MS1(a) memset(a,-1,sizeof(a))
  21. #define MSi(a) memset(a,0x3f,sizeof(a))
  22. #define inf 0x3f3f3f3f
  23. #define lson l, m, rt << 1
  24. #define rson m+1, r, rt << 1|1
  25. typedef pair<int,int> PII;
  26. #define A first
  27. #define B second
  28. #define MK make_pair
  29. typedef __int64 ll;
  30. template<typename T>
  31. void read1(T &m)
  32. {
  33. T x=,f=;char ch=getchar();
  34. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  35. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  36. m = x*f;
  37. }
  38. template<typename T>
  39. void read2(T &a,T &b){read1(a);read1(b);}
  40. template<typename T>
  41. void read3(T &a,T &b,T &c){read1(a);read1(b);read1(c);}
  42. template<typename T>
  43. void out(T a)
  44. {
  45. if(a>) out(a/);
  46. putchar(a%+'');
  47. }
  48. #define N 6066
  49. int dp[N][],vis[N];
  50. int head[N],tot;
  51. struct Edge{
  52. int to,w,Next;
  53. Edge(){}
  54. Edge(int to,int w,int Next):to(to),w(w),Next(Next){}
  55. }e[N<<];
  56. inline void ins(int u,int v,int w)
  57. {
  58. e[++tot] = Edge{v,w,head[u]};
  59. head[u] = tot;
  60. }
  61. void dfs(int u)
  62. {
  63. vis[u] = ;
  64. for(int d = head[u];d;d = e[d].Next){
  65. int v = e[d].to;
  66. if(vis[v]) continue;
  67. dfs(v);
  68. dp[u][] += max(dp[v][],dp[v][]);
  69. dp[u][] += dp[v][];
  70. }
  71. }
  72. int main()
  73. {
  74. int n;
  75. read1(n);
  76. rep1(i,,n) read1(dp[i][]);
  77. int a,b;
  78. while(read2(a,b),a+b){
  79. ins(a,b,);ins(b,a,);
  80. }
  81. dfs();
  82. printf("%d\n",max(dp[][],dp[][]));
  83. return ;
  84. }

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 题目大意:在一个公司中,每个职员有一个快乐值ai,现在要开一个party,邀请了一个员工就不可能邀请其直属上司,同理邀请了一个人 ...

  3. poj 2324 Anniversary party(树形DP)

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

  4. [poj2342]Anniversary party树形dp入门

    题意:选出不含直接上下司关系的最大价值. 解题关键:树形dp入门题,注意怎么找出根节点,运用了并查集的思想. 转移方程:dp[i][1]+=dp[j][0];/i是j的子树 dp[i][0]+=max ...

  5. POJ 2342 Anniversary party (树dp)

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

  6. POJ 1463 Strategic game(树形DP入门)

    题意: 给定一棵树, 问最少要占据多少个点才能守护所有边 分析: 树形DP枚举每个点放与不放 树形DP: #include<cstdio> #include<iostream> ...

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

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

  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. POJ 2342 树形DP入门题

    有一个大学的庆典晚会,想邀请一些在大学任职的人来參加,每一个人有自己的搞笑值,可是如今遇到一个问题就是假设两个人之间有直接的上下级关系,那么他们中仅仅能有一个来參加,求请来一部分人之后,搞笑值的最大是 ...

随机推荐

  1. 搜索引擎的提示效果完整的JavaScript代码

    function divShow() { <%--判断输入的是否为空 如果为空则隐藏div 如果不为空则显示div --%> if ($("#tbxSearchKeywords& ...

  2. Mysql命令行连接

    mysql在线参考手册地址: http://dev.mysql.com/doc/refman/5.1/zh/tutorial.html#connecting-disconnecting 在linux平 ...

  3. swift项目中嵌入oc

    参考资料 需要注意的是  与oc包含swift不同的是  swift包含oc需要在桥接文件中包含要使用的oc的头文件 demo:swiftPlayOc(提取码:37c6)

  4. opencv中的基本拼接

    普通版的图像拼接,事实上非常简单并且效果不很差. 实现方式: 新建工程: 去opencv里面[f:\opencv249\opencv\sources\samples\cpp]把stitching.cp ...

  5. lvm基础

    一.简介 LVM是 Logical Volume Manager(逻辑卷管理)的简写. LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬 ...

  6. gitHub添加公钥

    gitHub添加公钥 gitHub是通过SSH公钥连接到现有仓库的 设置SSH Key ssh-keygen -t rsa -C "your_email@example.com"G ...

  7. Java虚拟机专题

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/5160083. ...

  8. SpringMVC文件上传 Excle文件 Poi解析 验证 去重 并批量导入 MYSQL数据库

    SpringMVC文件上传 Excle文件 Poi解析并批量导入 MYSQL数据库  /** * 业务需求说明: * 1 批量导入成员 并且 自主创建账号 * 2 校验数据格式 且 重复导入提示 已被 ...

  9. smarty实现缓存

    首先需要在mySmarty中添加配置信息,开启缓存,设置缓存文件存放目录,设置缓存时间缓存可以实现减少访问数据库,减轻数据库压力,访问一次数据库,形成静态页面,下次直接调用这个页面,也可以用nocac ...

  10. system.badimageformatexception 未能加载文件或程序集

    今天在调用dll文件的时候发现这样一个错误.      system.badimageformatexception 未能加载文件或程序集.   发现项目CPU默认Any CPU,我的系统是X64,将 ...