题目链接:http://code.hdu.edu.cn/showproblem.php?pid=2412

思路:这篇文章讲的很清楚:http://wenku.baidu.com/view/84164e1a227916888486d7d6.html 。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<map>
 6 #include<string>
 7 #include<vector>
 8 using namespace std;
 9
10 int dp[222][2];
11 int flag[222][2];
12 int n;
13 vector<vector<int> >G;
14
15 void dfs(int u)
16 {
17     dp[u][0]=0;
18     dp[u][1]=1;
19     flag[u][0]=1;
20     flag[u][1]=1;
21     for(int i=0;i<G[u].size();i++){
22         int v=G[u][i];
23         dfs(v);
24         dp[u][0]+=max(dp[v][0],dp[v][1]);
25         dp[u][1]+=dp[v][0];
26         if(dp[v][0]>dp[v][1]&&flag[v][0]==0)flag[u][0]=0;
27         else if(dp[v][1]>dp[v][0]&&flag[v][1]==0)flag[u][0]=0;
28         else if(dp[v][0]==dp[v][1])flag[u][0]=0;
29         if(flag[v][0]==0)flag[u][1]=0;
30     }
31 }
32
33 int main()
34 {
35     char str[222],str1[222],str2[222];
36     while(~scanf("%d",&n)&&n){
37         G.clear();
38         G.resize(222);
39         map<string,int>name;
40         int cnt=0;
41         scanf("%s",str);
42         name[str]=++cnt;
43         for(int i=1;i<n;i++){
44             scanf("%s%s",str1,str2);
45             if(name.find(str1)==name.end())name[str1]=++cnt;
46             if(name.find(str2)==name.end())name[str2]=++cnt;
47             G[name[str2]].push_back(name[str1]);
48         }
49         memset(dp,0,sizeof(dp));
50         memset(flag,0,sizeof(flag));
51         dfs(1);
52         if(dp[1][0]>dp[1][1]&&flag[1][0]==1){
53             printf("%d Yes\n",dp[1][0]);
54         }else if(dp[1][1]>dp[1][0]&&flag[1][1]==1){
55             printf("%d Yes\n",dp[1][1]);
56         }else {
57             printf("%d No\n",max(dp[1][0],dp[1][1]));
58         }
59     }
60     return 0;
61 }
62
63
64
65
66             

View Code

hdu 2412(树形dp)相关推荐

  1. hdu 2196 树形dp

    [题意]:给出一棵树, 每条边有一个权值 求离每个节点最远的点的权值和 看这篇题解学会的  http://tech.ddvip.com/2013-09/1379006959202653.html 树形 ...

  2. hdu 1520 树形dp

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 #include<cstdio> #include<cstring> # ...

  3. hdu 5148 树形dp,分组背包

    题目: 题目分析: 状态方程: dp[当前节点的标号][当前已经选取的城市数] 设已经选取的城市数是K 初始状态: dp[u][0] = dp[u][1] = 0 , 其他的将值设置为无穷大 树形转移 ...

  4. Starship Troopers(HDU 1011 树形DP)

    题意: 给定n个定点和m个士兵,n个定点最终构成一棵树,每个定点有一定x个bugs和y个value,每20个bug需要消耗一个士兵,不足20也消耗一个,然后最终收获y个value,只有父节点被占领后子 ...

  5. hdu 5148Cities 树形dp

    //dp[u][k1]=min(dp[u][k1-k2]+dp[v][k2]+edge*k2*(k-k2)) //dp[u][k]表示以u节点为根节点的子树中选k个节点所得的最优解 #include& ...

  6. fwt优化+树形DP HDU 5909

    1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...

  7. HDU 2196 Computer 树形DP经典题

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...

  8. hdu 5909 Tree Cutting——点分治(树形DP转为序列DP)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5909 点分治的话,每次要做一次树形DP:但时间应该是 siz*m2 的.可以用 FWT 变成 siz*ml ...

  9. HDU 1520 Anniversary party(树形dp)

    HDU 1520 Anniversary party(树形dp) 树形dp第一题!!! 题意很清晰,思路也很明确.很容易找到根节点,即最大的boss,通过根节点向下dp. 状态转移方程: int to ...

  10. hdu 1561 The more, The Better 树形dp

    http://acm.hdu.edu.cn/showproblem.php?pid=1561 做树形dp比较小. 先上网学习下,总结下套路. dp[i][j]表示在第i个节点,有j个名额选的时候的最大 ...

最新文章

  1. 解密为什么八成IT人士愿意跳槽?
  2. html里五角星怎么打,html怎么显示五角星 几分给几个五角星
  3. Spring Cloud Alibaba 2021.0.1.0 发布:版本号再也不迷糊了
  4. boost::hana::filter用法的测试程序
  5. 【uva 1617】Laptop(算法效率--贪心,2种理解)
  6. bash shell 中时间操作常用方法总结
  7. [转]SSAS没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)) (Microsoft Visual Studio)的解决办法...
  8. 基于AWT、Swing的GUI编程 - 多个命令共享同一个监听器类
  9. 损失函数——交叉熵由来
  10. 【优化选址】基于matlab禁忌搜索算法求解基站选址优化问题【含Matlab源码 440期】
  11. [Docker] 03 AUFS
  12. Echarts+Vue地图
  13. java word 在线编辑图片,_卓正软件 - PageOffice官方网站 - 在线编辑Word、Excel的Office文档控件...
  14. 基于SMTP协议的E-MAIL电子邮件发送客户端软件C#实现
  15. dmac学习之基于shadow register的multi block transfer
  16. php error_reporting 无效,PHP error_reporting 很不理解。。。
  17. ScriptX,smsx打印控件安装的终极解决办法
  18. 校内互测题 by LMY (FSN)
  19. 数据分析入门书籍,你看过几本
  20. mysql eva模型_mySQL第一天

热门文章

  1. 专题七:MATLAB符号计算
  2. configure: error: udev support requested but libudev header not installed
  3. CDKEY制作:为什么不能使用RSA?
  4. 编译OpenJDK8 arm32的源码库
  5. You must install libks to build mod_signalwire
  6. 启用了文件索引,干脆连文件都找不到了
  7. 优化性能一点总结,供大家参考
  8. 拿了工资就要干活,不干活不是成了骗钱?
  9. 引用原话,不等于原意
  10. 遇到Python中文目录名问题,未解决