POJ 3342 Party at Hali-Bula ——(树型DP)
一开始用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)相关推荐
- POJ3342 Party at Hali-Bula(树型DP求最大独立集+唯一解判断)
题意: 公司参加聚会,要求员工不能和他的上司同时参加,求最多能参加几个人并且判断解是否唯一. 要点: 树型DP的经典题,用dp[u][1]表示选取u的最大值,dp[u][0]表示不选取u的最大值,容易 ...
- 其他OJ 树型DP 选课
在朱全民的PPT介绍的一个树型DP经典题,<选课>,中文题目,不结束 找了很久找到了可以提交的OJ,重庆八中 http://www.cqoi.net:2012/JudgeOnline/pr ...
- 【树型DP】BZOJ1564 二叉查找树(noi2009)
标签: 二叉查找树 [题目描述] 已知一棵特殊的二叉查找树.根据定义,该二叉查找树中每个结点的数据值都比它左儿子结点的数据值大,而比它右儿子结点的数据值小. 另一方面,这棵查找树中每个结点都有一个权值 ...
- 【树型DP】加分二叉树
问题 b: [树型DP]加分二叉树 时间限制: 1 Sec 内存限制: 64 MB 提交: 8 解决: 6 [提交] [状态] [讨论版] [命题人:admin] 题目描述 科技忽略了过程就是魔法 ...
- 二叉苹果树(树型DP+背包)
二叉苹果树 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点).这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号 ...
- 虚树+树型DP SDOI2011消耗战
<虚树+树型DP> SDOI2011消耗战 #include <iostream> #include <cstdio> #include <cstring&g ...
- BSOJ 2923:藤原妹红 MST+树型DP
2923 -- [模拟试题]藤原妹红 Description 在幻想乡,藤原妹红是拥有不老不死能力的人类.虽然不喜欢与人们交流,妹红仍然保护着误入迷途竹林村民.由于妹红算得上是幻想乡最强的人类,对于她 ...
- 洛谷P3354 Riv河流 [IOI2005] 树型dp
正解:树型dp 解题报告: 传送门! 简要题意:有棵树,每个节点有个权值w,要求选k个节点,最大化∑dis*w,其中如果某个节点到根的路径上选了别的节点,dis指的是到达那个节点的距离 首先这个一看就 ...
- hihocoder 1479 三等分 树型dp
描述 小Hi最近参加了一场比赛,这场比赛中小Hi被要求将一棵树拆成3份,使得每一份中所有节点的权值和相等. 比赛结束后,小Hi发现虽然大家得到的树几乎一模一样,但是每个人的方法都有所不同.于是小Hi希 ...
最新文章
- 晕死!博客园把我搞晕了!
- 技术人, 请不要封闭自己
- 编译bluez-5.25 通过 Linux环境下运行
- Georgia and Bob(Poj 1704)Nim 博弈
- 产品认知:说说产品经理的底层思维——用户思维
- php title限制字数,dedecms:title解决字数限制的两种方法
- 人人都能看懂的机器学习!3个案例详解聚类、回归、分类算法
- 6个必须掌握的基础配置 - [webpack第一篇]
- Mysql之慢查询日志详解
- iOS项目中的网络请求和上下拉刷新封装
- css3 animate 和关键帧 @-webkit-keyframes
- qt自带的文档系统软件叫什么名字_翻译 | 为什么QObject子类不可复制?
- 设置VSS使支持通过Internet访问
- 搜索整理MyEclipse 快捷键
- 文书档案管理系统服务器版,文书档案管理系统
- 河南省第八届ACM程序设计竞赛(未完再续)
- 什么是CTP程序化交易:系统入门
- 为什么计算机三分技术七分管理,如何理解“七分管理,三分技术,运作贯穿始终”?...
- 微信开发工具 git代码管理
- 根据身份证号或营业执照编号取省市区信息