一开始用pii保存dp类型,写的很长,还是WA了= =。。

  然后参考了一下别人的博客,重新写了一发(似乎是岐哥的博客233)。

  代码如下:

 1 #include <stdio.h>
 2 #include <algorithm>
 3 #include <string.h>
 4 #include <iostream>
 5 #include <string>
 6 #include <vector>
 7 #include <map>
 8 using namespace std;
 9 const int N = 200 + 5;
10
11 int n;
12 map<string,int> M;
13 vector<int> G[N];
14 int tot = 0;
15 int dp[N][2];
16 void dfs(int u)
17 {
18     dp[u][0] = 0;
19     dp[u][1] = 1;
20     for(int i=0;i<G[u].size();i++)
21     {
22         int v = G[u][i];
23         dfs(v);
24         dp[u][0] += max(dp[v][1], dp[v][0]);
25         dp[u][1] += dp[v][0];
26     }
27 }
28
29 int main()
30 {
31     while(scanf("%d",&n) == 1 && n)
32     {
33         for(int i=1;i<=n;i++) G[i].clear();
34         tot = 0;
35         M.clear();
36
37         string boss;
38         cin >> boss;
39         M[boss] = ++tot;
40         for(int i=1;i<n;i++)
41         {
42             string a,b;
43             cin >> a >> b;
44             if(M[a] == 0) M[a] = ++tot;
45             if(M[b] == 0) M[b] = ++tot;
46             int u = M[a], v = M[b];
47             G[v].push_back(u);
48         }
49
50         dfs(1);
51         printf("%d ",max(dp[1][0], dp[1][1]));
52         int flag = dp[1][0] != dp[1][1];
53         for(int i=1;i<=n&&flag;i++)
54         {
55             if(dp[i][0] < dp[i][1]) continue;
56             for(int j=0;j<G[i].size()&&flag;j++)
57             {
58                 int v = G[i][j];
59                 if(dp[v][1] == dp[v][0])
60                 {
61                     flag = 0;
62                     break;
63                 }
64             }
65         }
66         puts(flag ? "Yes" : "No");
67     }
68     return 0;
69 }

  想说明的一点是,博客里面的判断是否有多种可能的if条件应当是dp[i][0] >= dp[i][1],虽然两者都能AC,但是我觉得这样更加妥当一些。

转载于:https://www.cnblogs.com/zzyDS/p/6629355.html

POJ 3342 Party at Hali-Bula ——(树型DP)相关推荐

  1. POJ3342 Party at Hali-Bula(树型DP求最大独立集+唯一解判断)

    题意: 公司参加聚会,要求员工不能和他的上司同时参加,求最多能参加几个人并且判断解是否唯一. 要点: 树型DP的经典题,用dp[u][1]表示选取u的最大值,dp[u][0]表示不选取u的最大值,容易 ...

  2. 其他OJ 树型DP 选课

    在朱全民的PPT介绍的一个树型DP经典题,<选课>,中文题目,不结束 找了很久找到了可以提交的OJ,重庆八中 http://www.cqoi.net:2012/JudgeOnline/pr ...

  3. 【树型DP】BZOJ1564 二叉查找树(noi2009)

    标签: 二叉查找树 [题目描述] 已知一棵特殊的二叉查找树.根据定义,该二叉查找树中每个结点的数据值都比它左儿子结点的数据值大,而比它右儿子结点的数据值小. 另一方面,这棵查找树中每个结点都有一个权值 ...

  4. 【树型DP】加分二叉树

    问题 b: [树型DP]加分二叉树 时间限制: 1 Sec  内存限制: 64 MB 提交: 8  解决: 6 [提交] [状态] [讨论版] [命题人:admin] 题目描述 科技忽略了过程就是魔法 ...

  5. 二叉苹果树(树型DP+背包)

    二叉苹果树 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点).这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号 ...

  6. 虚树+树型DP SDOI2011消耗战

    <虚树+树型DP> SDOI2011消耗战 #include <iostream> #include <cstdio> #include <cstring&g ...

  7. BSOJ 2923:藤原妹红 MST+树型DP

    2923 -- [模拟试题]藤原妹红 Description 在幻想乡,藤原妹红是拥有不老不死能力的人类.虽然不喜欢与人们交流,妹红仍然保护着误入迷途竹林村民.由于妹红算得上是幻想乡最强的人类,对于她 ...

  8. 洛谷P3354 Riv河流 [IOI2005] 树型dp

    正解:树型dp 解题报告: 传送门! 简要题意:有棵树,每个节点有个权值w,要求选k个节点,最大化∑dis*w,其中如果某个节点到根的路径上选了别的节点,dis指的是到达那个节点的距离 首先这个一看就 ...

  9. hihocoder 1479 三等分 树型dp

    描述 小Hi最近参加了一场比赛,这场比赛中小Hi被要求将一棵树拆成3份,使得每一份中所有节点的权值和相等. 比赛结束后,小Hi发现虽然大家得到的树几乎一模一样,但是每个人的方法都有所不同.于是小Hi希 ...

最新文章

  1. 晕死!博客园把我搞晕了!
  2. 技术人, 请不要封闭自己
  3. 编译bluez-5.25 通过 Linux环境下运行
  4. Georgia and Bob(Poj 1704)Nim 博弈
  5. 产品认知:说说产品经理的底层思维——用户思维
  6. php title限制字数,dedecms:title解决字数限制的两种方法
  7. 人人都能看懂的机器学习!3个案例详解聚类、回归、分类算法
  8. 6个必须掌握的基础配置 - [webpack第一篇]
  9. Mysql之慢查询日志详解
  10. iOS项目中的网络请求和上下拉刷新封装
  11. css3 animate 和关键帧 @-webkit-keyframes
  12. qt自带的文档系统软件叫什么名字_翻译 | 为什么QObject子类不可复制?
  13. 设置VSS使支持通过Internet访问
  14. 搜索整理MyEclipse 快捷键
  15. 文书档案管理系统服务器版,文书档案管理系统
  16. 河南省第八届ACM程序设计竞赛(未完再续)
  17. 什么是CTP程序化交易:系统入门
  18. 为什么计算机三分技术七分管理,如何理解“七分管理,三分技术,运作贯穿始终”?...
  19. 微信开发工具 git代码管理
  20. 根据身份证号或营业执照编号取省市区信息

热门文章

  1. 非常详细的测试unity与android之间的通讯操作
  2. 多版本号并发控制(MVCC)在分布式系统中的应用
  3. 一个同步github上fork过来的项目的批处理脚本
  4. Windows Azure ISV博客系列:ReedRex 的sociobridge
  5. Django REST framework API 指南(12):验证器
  6. elasticsearch数据长期保存的方案
  7. js 前端操作的分页路由设计
  8. 疯狂kotlin讲义连载之运算符和表达式——区间运算符
  9. 【freeCodeCamp】免费晋级前台工程师呦!!!!
  10. mysql支持跨表delete删除多表记录