思路:对于最大的人数很容易想到,就直接dp。但对于最大值是否唯一就需要应用辅助数组,isOnly[i][0]表示dp[i][0]是否唯一,同理isOnly[i][1]。

那么当(dp[v][0]>dp[v][1]&&isOnly[v][0]==0)或(dp[v][1]>dp[v][0]&&isOnly[v][1]==0)或(dp[v][1]==dp[v][0]),那么isOnly[u][0]=0;

如果isOnly[v][0]==0,那么isOnly[u][1]=0;

  1. #include<iostream>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<cstdio>
  5. #include<vector>
  6. #include<map>
  7. #define Maxn 210
  8. using namespace std;
  9. int vi[Maxn],dp[Maxn][],n,isOnly[Maxn][];
  10. vector <int> head[Maxn];
  11. map <string,int> q;
  12. void init()
  13. {
  14. memset(vi,,sizeof(vi));
  15. memset(dp,,sizeof(dp));
  16. for(int i=;i<=n;i++)
  17. head[i].clear();
  18. q.clear();
  19. }
  20. void add(int u,int v)
  21. {
  22. head[u].push_back(v);
  23. head[v].push_back(u);
  24. }
  25. void dfs(int u)
  26. {
  27. int i,v,sz;
  28. vi[u]=;
  29. sz=head[u].size();
  30. dp[u][]=;
  31. dp[u][]=;
  32. isOnly[u][]=isOnly[u][]=;
  33. for(i=;i<sz;i++)
  34. {
  35. v=head[u][i];
  36. if(vi[v]) continue;
  37. dfs(v);
  38. dp[u][]+=dp[v][];
  39. dp[u][]+=max(dp[v][],dp[v][]);
  40. if(dp[v][]>dp[v][]&&isOnly[v][]==) isOnly[u][]=;
  41. else if(dp[v][]>dp[v][]&&isOnly[v][]==) isOnly[u][]=;
  42. else if(dp[v][]==dp[v][]) isOnly[u][]=;
  43. if(isOnly[v][]==) isOnly[u][]=;
  44. }
  45. }
  46. int main()
  47. {
  48. int i,j,cnt=;
  49. char str1[Maxn],str2[Maxn];
  50. while(scanf("%d",&n),n)
  51. {
  52. cnt=;
  53. init();
  54. scanf("%s",&str1);
  55. q[str1]=++cnt;
  56. for(i=;i<n;i++)
  57. {
  58. scanf("%s%s",&str1,&str2);
  59. if(!q[str1])
  60. q[str1]=++cnt;
  61. if(!q[str2])
  62. q[str2]=++cnt;
  63. add(q[str1],q[str2]);
  64. }
  65. dfs();
  66. if(dp[][]>dp[][]&&isOnly[][])
  67. printf("%d Yes\n",dp[][]);
  68. else
  69. if(dp[][]>dp[][]&&isOnly[][])
  70. printf("%d Yes\n",dp[][]);
  71. else
  72. printf("%d No\n",max(dp[][],dp[][]));
  73. }
  74. return ;
  75. }

hdu 2412 树形DP的更多相关文章

  1. hdu 4123 树形DP+RMQ

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

  2. HDU 1520 树形dp裸题

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

  3. HDU 1561 树形DP入门

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

  4. HDU 2196树形DP(2个方向)

    HDU 2196 [题目链接]HDU 2196 [题目类型]树形DP(2个方向) &题意: 题意是求树中每个点到所有叶子节点的距离的最大值是多少. &题解: 2次dfs,先把子树的最大 ...

  5. HDU 1520 树形DP入门

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

  6. codevs 1380/HDU 1520 树形dp

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

  7. HDU 5834 [树形dp]

    /* 题意:n个点组成的树,点和边都有权值,当第一次访问某个点的时候获得利益为点的权值 每次经过一条边,丢失利益为边的权值.问从第i个点出发,获得的利益最大是多少. 输入: 测试样例组数T n n个数 ...

  8. hdu 4267 树形DP

    思路:先dfs一下,找出1,n间的路径长度和价值,回溯时将该路径长度和价值清零.那么对剩下的图就可以直接树形dp求解了. #include<iostream> #include<al ...

  9. hdu 4607 (树形DP)

    当时比赛的时候我们找出来只要求出树的最长的边的节点数ans,如果要访问点的个数n小于ans距离直接就是n-1 如果大于的话就是(n-ans)*2+ans-1,当时求树的直径难倒我们了,都不会树形dp ...

随机推荐

  1. 一个word合并项目的分布式架构设计

    一个word合并项目的分布式架构设计 项目背景与问题起源 我们要给一个客户做word生成报告以及报告合并的工作,要合并的报告非常多,而且每个报告也比较大,一个多的报告大概有200页以上.我们用c#操作 ...

  2. poj 2349 Arctic Network

    http://poj.org/problem?id=2349 Arctic Network Time Limit: 2000MS   Memory Limit: 65536K Total Submis ...

  3. mysql一些写常用命令

    参见pcttcnc2007博客腾飞 1.mysql的status信息命令: mysql> show global status; 2.可以列出mysql服务器运行各种状态值,另外,查询mysql ...

  4. BestCoder Round #65 hdu5591(尼姆博弈)

    ZYB's Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  5. [C语言 - 3] 字符串

    字符数组 char * 看做一个特殊的字符数组, 在字符串结束为止添加'\0'结束符 (ASCII码0), 没有\0结尾的是普通的字符数组. 使用双引号定义的字符串自动在尾部加上\0 puts(s)函 ...

  6. Linux定时执行任务命令概述:at和crontab

    本文介绍在Linux下的两种定时执行任务的方法:at命令,以及crontab服务. (1)at命令 假如我们只是想要让特定任务运行一次,那么,这时候就要用到at监控程序了. 设置at命令很简单,指示定 ...

  7. 汇总:Linux下svn命令大全

    svn(subversion)是近年来崛起的版本管理工具,svn服务器有2种运行方式:独立服务器和借助apache.2种方式各有利弊.不管是那种方式,都需要使用各种命令来实现.在本文中,haohtml ...

  8. 开发WebForm时遇到的问题

    在做一个小项目时,一个很长的页面,页面底部有一个contact us form 整个页面我没有使用MVC,而是使用ASP.NET WebForm(.aspx)来实现,实现功能后发现,当用户在页面底部输 ...

  9. Oracle数据库如何授权收费(Database Licensing)

    Oracle软件本身是免费的,所以任何人都可以从Oracle官方网站下载并安装Oracle的数据库软件,收费的是License,即软件授权,如果数据库用于商业用途,就需要购买相应Oracle产品的Li ...

  10. [AngularJS] $http cache

    By default your HTTP requests with the $https service in Angular are not cached. By setting some opt ...