hdu 2412 Party at Hali-Bula 经典树形DP
Party at Hali-Bula
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1365 Accepted Submission(s): 454
I'm going to have a party at my villa at Hali-Bula to celebrate my retirement from BCM. I wish I could invite all my co-workers, but imagine how an employee can enjoy a party when he finds his boss among the guests! So, I decide not to invite both an employee and his/her boss. The organizational hierarchy at BCM is such that nobody has more than one boss, and there is one and only one employee with no boss at all (the Big Boss)! Can I ask you to please write a program to determine the maximum number of guests so that no employee is invited when his/her boss is invited too? I've attached the list of employees and the organizational hierarchy of BCM.
Best,
--Brian Bennett
P.S. I would be very grateful if your program can indicate whether the list of people is uniquely determined if I choose to invite the maximum number of guests with that condition.
Jason
Jack Jason
Joe Jack
Jill Jason
John Jack
Jim Jill
2
Ming
Cho Ming
0
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std; struct node
{
int next[];
int num;
}f[];
char cur[][];
int len;
bool glag,flag;
int dp[][];
int ndp[][]; int Max(int x,int y)
{
return x>y? x:y;
} int serch(char a[])
{
int i;
for(i=;i<=len;i++)
{
if(strcmp(a,cur[i])==)
return i;
}
strcpy(cur[++len],a);
return len;
} void dfs(int k)
{
int i,q,cur=;
if(f[k].num==)
{
dp[k][]=;
dp[k][]=;
ndp[k][]=;
ndp[k][]=;
return;
}
for(i=;i<=f[k].num;i++)
{
q=f[k].next[i];
dfs(q);
cur=Max(dp[q][],dp[q][]);
dp[k][]+=cur;
dp[k][]+=dp[q][]; if(dp[q][]>dp[q][]&&ndp[q][]==)
ndp[k][]=;
if(dp[q][]>dp[q][]&&ndp[q][]==)
ndp[k][]=;
if(dp[q][]==dp[q][]) ndp[k][]=; if(ndp[q][]==) ndp[k][]=;
}
dp[k][]++;
if(ndp[k][]==-) ndp[k][]=;
if(ndp[k][]==-) ndp[k][]=;
} int main()
{
int i,n,ans1,ans2;
char a[],b[];
while(scanf("%d",&n)>)
{
if(n==)break;
for(i=;i<=;i++) f[i].num=;
scanf("%s",cur[]);
len=;
for(i=;i<n;i++)
{
scanf("%s%s",a,b);
ans1=serch(a);
ans2=serch(b); f[ans2].num++;
f[ans2].next[f[ans2].num]=ans1; }
memset(dp,,sizeof(dp));
memset(ndp,-,sizeof(ndp));
glag=false;flag=false;
dfs(); if(dp[][]>dp[][]&&ndp[][]==)
printf("%d Yes\n",dp[][]);
else if(dp[][]>dp[][]&&ndp[][]==)
printf("%d Yes\n",dp[][]);
else printf("%d No\n",Max(dp[][],dp[][]));
}
return ;
}
hdu 2412 Party at Hali-Bula 经典树形DP的更多相关文章
- HDU 1561 The more, The Better 经典树形DP
The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 4126 Genghis Khan the Conqueror 最小生成树+树形dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4126 Genghis Khan the Conqueror Time Limit: 10000/50 ...
- 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)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1520 Anniversary party Time Limit: 2000/1000 MS (Java ...
- bzoj 2159 Crash 的文明世界 && hdu 4625 JZPTREE ——第二类斯特林数+树形DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2159 学习材料:https://blog.csdn.net/litble/article/d ...
- bzoj 2159 Crash 的文明世界 & hdu 4625 JZPTREE —— 第二类斯特林数+树形DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2159 使用公式:\( n^{k} = \sum\limits_{i=0}^{k} S(k,i ...
- HDU 4003 Find Metal Mineral(分组背包+树形DP)
题目链接 很棒的一个树形DP.学的太渣了. #include <cstdio> #include <string> #include <cstring> #incl ...
- 【HDU - 4340】Capturing a country(树形DP)
BUPT2017 wintertraining(15) #8A 题意 n(<100)个城市组成的树.A攻击i城市需要a[i]代价,B需要b[i].如果一个城市的邻居被A攻击了,那么A攻击它只要A ...
- hdu 3660 Alice and Bob's Trip(树形DP)
Alice and Bob's Trip Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- HDU 1561 The more, The Better【树形DP/有依赖的分组背包】
ACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物.但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先 ...
随机推荐
- LOJ#2015. 「SCOI2016」妖怪(凸包)
传送门 首先可以把每个妖怪看成二维平面上的一个点,那么每一个环境\((a,b)\)就可以看成一条斜率\(k=-\frac{b}{a}\)的过该点的直线,战斗力就是这条直线在两坐标轴上的截距之和 对于每 ...
- BZOJ 1579--道路升级(DP&最短路)
1579: [Usaco2009 Feb]Revamping Trails 道路升级 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2206 Solv ...
- Word2007文档中怎么输入上标下标
1.Word中输出Z = X2 + Y2 此公式流程: 首先在Word中写入:Z = X2 + Y2: 方法1:选中X后面的2,再按组合键“Ctrl+Shift+加号键”即可,如此操作Y后面的2即可.
- Linux下查找命令
在CentOs下查找某个目录下的某个文件,使用如下指令: find /目录 -name 文件名 eg:查找当前目录下关于hadoop的文件 find / -name hadoop
- python3.6的request
request实例1: import requests payload = {'key1':'value','key2':'value2'} url = "http://httpbin.or ...
- 豆瓣电影信息爬取(json)
豆瓣电影信息爬取(json) # a = "hello world" # 字符串数据类型# b = {"name":"python"} # ...
- 利用CSS 修改input=radio的默认样式(改成选择框)
html部分: <input id="item2" type="radio" name="item"> <label fo ...
- Mac OS 10.12使用SecureCRT 8.1.4无法保存密码的问题解决
参考上图取消Use Keychain即可. 参考: https://jingyan.baidu.com/article/915fc414fda5fb51394b20bd.html
- Linux启动与关闭WIndows服务记录
启动: mono-service -l:/var/run/Myservice-lock.pid MyService.exe (这个-l参数一定要加上) 控制服务: 暂停: kill -USR1 `ca ...
- struts2上传单个文件
项目目录: struts.xml配置: <constant name="struts.enable.DynamicMethodInvocation" value=" ...