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个城堡并获得里面的宝物.但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先 ...
随机推荐
- jquery源码解析:addClass,toggleClass,hasClass详解
这一课,我们将继续讲解jQuery对元素属性操作的方法. 首先,我们先看一下这几个方法是如何使用的: $("#div1").addClass("box1 box2&quo ...
- iOS 一张图片引发的崩溃SEGV_ACCERR
出错日志一直报SEGV_ACCERR,原因原来是第三方库SDWebImage下载图片,远程图片的json文件不对导致的闪退 解决方法: 1.command + B 编译工程(最好在编译工程时,清除下缓 ...
- XCode7无证书真机调试教程
转载自http://altair21.com/156.html 前提条件: XCode版本>=7 1. 进入xcode,菜单栏选择xcode –> preferences (快捷键 com ...
- C++基础知识-inline、const、mutable、this、static
一.在类定义中实现成员函数inline 类内的成员函实现其实也叫作类内的成员函数定义. 这种直接在类的定义中实现的函数,会被当做inline内联函数来处理. 二.成员函数末尾的const const: ...
- 为什么要重写hashcode方法和equals方法
我们可能经常听到说重写equals方法必须重写hashcode方法,这是为什么呢?java中所有的类都是Object的子类,直接上object源码 /* * Copyright (c) 1994, 2 ...
- 关于 unsigned long long 于 long long
long long 最大只有19位 : unsigned long long 最大有20位 ,原因牺牲了符合位来换取更大的记录
- html5: 复制到剪贴板 clipboard.js
1.使用clipboard.min.js工具,引用此js 注意事项: IOS微信网页开发中,若使用此工具来开发复制功能,则需要在超链接/按钮上新增 onclick=" " 2.cl ...
- C语言warning的收集和总结
1. warning: suggest parentheses around comparison in operand of '&' 分析: &运算符的优先级较低,低于==和!=运算 ...
- MySQL 创建schema
create schema zzz default character set utf8 collate utf8_general_ci;--创建数据库 grant select,insert,upd ...
- Neo4j使用简单例子(转)
Neo4j Versions Most of the examples on this page are written with Neo4j 2.0 in mind, so they skip th ...