Party at Hali-Bula(树形DP+判断方案数是否唯一)
Party at Hali-Bula
UVA - 1220
题意:
公司里有n(n<=200)个人形成一个树状结构, 要求尽量选多的人,但不能同时选择一个人和他的直属上司,文最多能选多少人,以及是否方案唯一。
1 //dp[x][0]表示不选X节点能达到的最大人数,dp[x][1]表示选x节点的最大人数 2 //f数组含义和dp基本一致,f[x][0]表示如果不选x节点是否方案数唯一 f[x][1]表示如果选x节点方案数是否唯一 3 //如果f数组为1表示方案数不唯一 4 //对于一个根节点,如果其子节点中有一个方案数不唯一则其方案数不唯一 5 6 #include<iostream> 7 #include<cstdio> 8 #include<cstring> 9 #include<map> 10 #include<vector> 11 #include<algorithm> 12 using namespace std; 13 vector<int>v[500]; 14 string s1,s2; 15 map<string,int>mp; 16 int n; 17 int flag; 18 int dp[500][500]; 19 int f[500][500]; 20 int vis[500]; 21 void dfs(int x) 22 { 23 24 dp[x][0]=0; 25 dp[x][1]=1; 26 vis[x]=1; 27 for(int i=0;i<v[x].size();i++) 28 { 29 int to=v[x][i]; 30 if(vis[to]) 31 continue; 32 dfs(to); 33 //选根节点 34 dp[x][1]+=dp[to][0]; 35 if(f[to][0]) 36 { 37 f[x][1]=1; 38 } 39 //不选根节点 40 if(dp[to][0]>dp[to][1]) 41 { 42 dp[x][0]+=dp[to][0]; 43 if(f[to][0]) 44 { 45 f[x][0]=1; 46 } 47 } 48 else 49 { 50 dp[x][0]+=dp[to][1]; 51 if(f[to][1]||dp[to][0]==dp[to][1]) 52 { 53 f[x][0]=1; 54 } 55 } 56 } 57 return ; 58 } 59 int main() 60 { 61 while(~scanf("%d",&n)&&n) 62 { 63 memset(vis,0,sizeof(vis)); 64 memset(dp,0,sizeof(dp)); 65 memset(f,0,sizeof(f)); 66 for(int i=0;i<500;i++) 67 v[i].clear(); 68 mp.clear(); 69 cin>>s1; 70 int cnt=1; 71 if(!mp[s1]) 72 { 73 mp[s1]=cnt++; 74 } 75 n--; 76 while(n--) 77 { 78 cin>>s1>>s2; 79 if(!mp[s1]) 80 { 81 mp[s1]=cnt++; 82 } 83 if(!mp[s2]) 84 { 85 mp[s2]=cnt++; 86 } 87 v[mp[s2]].push_back(mp[s1]); 88 } 89 flag=0; 90 dfs(1); 91 printf("%d ",max(dp[1][0],dp[1][1])); 92 if(dp[1][0]==dp[1][1]) 93 { 94 puts("No"); 95 } 96 else 97 { 98 if(dp[1][0]>dp[1][1]) 99 { 100 if(f[1][0]) 101 cout<<"No"<<endl; 102 else 103 cout<<"Yes"<<endl; 104 } 105 else if(dp[1][1]>dp[1][0]) 106 { 107 if(f[1][1]) 108 cout<<"No"<<endl; 109 else 110 cout<<"Yes"<<endl; 111 } 112 113 } 114 } 115 }
转载于:https://www.cnblogs.com/1013star/p/9942412.html
Party at Hali-Bula(树形DP+判断方案数是否唯一)相关推荐
- POJ 3342- Party at Hali-Bula (树形dp+判断是否唯一)
题目: Dear Contestant, I'm going to have a party at my villa at Hali-Bula to celebrate my retirement f ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 "低价购买"这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:"低价购买:再低价购买".每次你购买一支股 ...
- 左神算法:判断二叉树是否为平衡二叉树(树形dp套路,Java版)
本题来自左神<程序员代码面试指南>"判断二叉树是否为平衡二叉树"题目. 题目 平衡二叉树的性质为:要么是一棵空树,要么任何一个节点的左右子树高度差的绝对值不超过 1. ...
- 洛谷:P4516 [JSOI2018] 潜入行动(树形dp、树上分组背包统计方案数)
潜入行动 题意: 在树上每个点可以放置监控设备,监控该点周围的点(不包括该点),问刚好放置 k 个监控设备监控使得整棵树所有点都被监控的方案数是多少. 思路: 显然是个树形dp,k个监控自然联想分组背 ...
- 青云的机房组网方案(简单+普通+困难)(虚树+树形DP+容斥)
题目链接 1.对于简单的版本n<=500, ai<=50 直接暴力枚举两个点x,y,dfs求x与y的距离. 2.对于普通难度n<=10000,ai<=500 普通难度解法挺多 ...
- “今日头条杯”首届湖北省大学程序设计竞赛 D. Who killed Cock Robin(选择联通子图的方案数,树形dp)
题意: 给定n个点的树,求选出一个联通子图的方案数,答案对1e9+7取模. 数据范围:n<=2e5 解法: 设 d [ x ] 以 x 为 根 的 子 树 中 , 选 择 点 x 之 后 , 连 ...
- 【学时总结】◆学时·VIII◆ 树形DP
◆学时·VIII◆ 树形DP DP像猴子一样爬上了树--QwQ ◇ 算法概述 基于树的模型,由于树上没有环,满足DP的无后效性,可以充分发挥其强大统计以及计算答案的能力. 一般来说树形DP的状态定义有 ...
- bzoj4472: [Jsoi2015]salesman(树形dp)
Description 某售货员小T要到若干城镇去推销商品,由于该地区是交通不便的山区,任意两个城镇 之间都只有唯一的可能经过其它城镇的路线. 小T 可以准确地估计出在每个城镇停留的净收 益.这些净收 ...
- 【CF1646D】D. Weight the Tree(树形dp、贪心)
加权树 题意: 给定一颗树,让你给树上的点赋予权值.定义一个点的权值等于其所有相邻节点的权重之和时,这个点就是 good. 你需要找到一种赋值方法,使得树中 good 点数最多,同时所有顶点的权重总和 ...
最新文章
- 36小时,造一个亚马逊无人商店 | 实战教程+代码
- win10运行在哪里_升级!Win10 2004版即将推送,减少CPU占用率,旧电脑也运行如飞...
- 代码流程图怎么画_程序流图怎么画?详细图文解析绘制程序流程图
- Python中字符串使用方法总结(学习笔记)
- 异步加载 防止图片混乱
- Oracle 创建dblink
- java 实现excel样式设置(居中、字体、大小、换行、合并行,列宽、指定特定字符串样式等)
- 汇编:用户登录以及简单数据加密
- 解决php上传文件过程中Warning move_uploaded_file, failed to open stream的解决方案
- docker 监控之 cadvisor
- 《ANSYS Workbench有限元分析实例详解(静力学)》——第1章 CAE分析步骤1.1 模型简化...
- python字符画绘制代码_python图片转字符画代码是什么
- 如何释放计算机的ip地址,电脑执行释放DNS和更新IP的命令是什么?怎么执行
- Matlab在线性代数中的应用(三):求解非齐次线性方程组
- mysql timeout的详细介绍
- 《孙子兵法战略运筹之谋攻篇》
- 云原生的进一步具象化
- 有利可图网_第一章:有利可图的项目手册
- 数据增强方式mosaic(基于yolo4)代码实现python
- 笔记本电脑电池的保养和优化