hdu 2412(树形dp)
题目链接: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)相关推荐
- hdu 2196 树形dp
[题意]:给出一棵树, 每条边有一个权值 求离每个节点最远的点的权值和 看这篇题解学会的 http://tech.ddvip.com/2013-09/1379006959202653.html 树形 ...
- hdu 1520 树形dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 #include<cstdio> #include<cstring> # ...
- hdu 5148 树形dp,分组背包
题目: 题目分析: 状态方程: dp[当前节点的标号][当前已经选取的城市数] 设已经选取的城市数是K 初始状态: dp[u][0] = dp[u][1] = 0 , 其他的将值设置为无穷大 树形转移 ...
- Starship Troopers(HDU 1011 树形DP)
题意: 给定n个定点和m个士兵,n个定点最终构成一棵树,每个定点有一定x个bugs和y个value,每20个bug需要消耗一个士兵,不足20也消耗一个,然后最终收获y个value,只有父节点被占领后子 ...
- hdu 5148Cities 树形dp
//dp[u][k1]=min(dp[u][k1-k2]+dp[v][k2]+edge*k2*(k-k2)) //dp[u][k]表示以u节点为根节点的子树中选k个节点所得的最优解 #include& ...
- fwt优化+树形DP HDU 5909
1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...
- HDU 2196 Computer 树形DP经典题
链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...
- hdu 5909 Tree Cutting——点分治(树形DP转为序列DP)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5909 点分治的话,每次要做一次树形DP:但时间应该是 siz*m2 的.可以用 FWT 变成 siz*ml ...
- HDU 1520 Anniversary party(树形dp)
HDU 1520 Anniversary party(树形dp) 树形dp第一题!!! 题意很清晰,思路也很明确.很容易找到根节点,即最大的boss,通过根节点向下dp. 状态转移方程: int to ...
- hdu 1561 The more, The Better 树形dp
http://acm.hdu.edu.cn/showproblem.php?pid=1561 做树形dp比较小. 先上网学习下,总结下套路. dp[i][j]表示在第i个节点,有j个名额选的时候的最大 ...
最新文章
- 解密为什么八成IT人士愿意跳槽?
- html里五角星怎么打,html怎么显示五角星 几分给几个五角星
- Spring Cloud Alibaba 2021.0.1.0 发布:版本号再也不迷糊了
- boost::hana::filter用法的测试程序
- 【uva 1617】Laptop(算法效率--贪心,2种理解)
- bash shell 中时间操作常用方法总结
- [转]SSAS没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)) (Microsoft Visual Studio)的解决办法...
- 基于AWT、Swing的GUI编程 - 多个命令共享同一个监听器类
- 损失函数——交叉熵由来
- 【优化选址】基于matlab禁忌搜索算法求解基站选址优化问题【含Matlab源码 440期】
- [Docker] 03 AUFS
- Echarts+Vue地图
- java word 在线编辑图片,_卓正软件 - PageOffice官方网站 - 在线编辑Word、Excel的Office文档控件...
- 基于SMTP协议的E-MAIL电子邮件发送客户端软件C#实现
- dmac学习之基于shadow register的multi block transfer
- php error_reporting 无效,PHP error_reporting 很不理解。。。
- ScriptX,smsx打印控件安装的终极解决办法
- 校内互测题 by LMY (FSN)
- 数据分析入门书籍,你看过几本
- mysql eva模型_mySQL第一天