树形DP水题。判断取法是否唯一,dp的时候记录一下每个状态从下面的子节点推导过来的时候是否唯一即可。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<map>
#include<vector>
#include<string>
#include<algorithm>
#include<iostream>
using namespace std; const int maxn=+;
map<string,int>v;
vector<int>tree[maxn];
int n,id;
int dp[maxn][],flag[maxn][];
string s;
bool vis[maxn]; void init()
{
id=;
v.clear();
memset(dp,,sizeof dp);
memset(flag,,sizeof flag);
memset(vis,,sizeof vis);
for(int i=;i<=n;i++) tree[i].clear();
} void read()
{
cin>>s;
if(!v[s]) v[s]=++id;
for(int i=;i<=n-;i++)
{
int a,b;
cin>>s; if(v[s]==) v[s]=++id;
a=v[s];
cin>>s; if(v[s]==) v[s]=++id;
b=v[s];
tree[a].push_back(b);
tree[b].push_back(a);
}
} void dfs(int now)
{
bool fail=;
for(int i=;i<tree[now].size();i++)
if(!vis[tree[now][i]]) fail=; if(fail)
{
dp[now][]=;
dp[now][]=;
return;
} int sum1=,sum2=; for(int i=;i<tree[now].size();i++)
{
int id=tree[now][i];
if(vis[id]) continue; vis[id]=; dfs(id); sum1=sum1+dp[id][];
if(flag[id][]==) flag[now][]=; sum2=sum2+max(dp[id][],dp[id][]);
if(dp[id][]==dp[id][]) flag[now][]=;
else if(dp[id][]>dp[id][]){if(flag[id][]) flag[now][]=;}
else {if(flag[id][]) flag[now][]=;}
}
dp[now][]=sum1;
dp[now][]=sum2; } void work()
{
vis[]=;
dfs();
printf("%d ",max(dp[][],dp[][]));
bool ans=;
if(dp[][]>dp[][]) {if(flag[][]) ans=;}
else if(dp[][]<dp[][]) {if(flag[][]) ans=;}
else ans=;
if(ans) printf("No\n");
else printf("Yes\n");
} int main()
{
while(~scanf("%d",&n))
{
if(!n) break;
init();
read();
work();
}
return ;
}

HDU 2412 Party at Hali-Bula的更多相关文章

  1. POJ 3342 Party at Hali-Bula / HDU 2412 Party at Hali-Bula / UVAlive 3794 Party at Hali-Bula / UVA 1220 Party at Hali-Bula(树型动态规划)

    POJ 3342 Party at Hali-Bula / HDU 2412 Party at Hali-Bula / UVAlive 3794 Party at Hali-Bula / UVA 12 ...

  2. hdu 2412 Party at Hali-Bula【树形dp】

    HDU 2412 和poj 2342(hdu 1520)差不多,多了一个判断最优解是(Yes)否(No)唯一.关键问题也在这个判断最优解是否唯一上. 先定义dp[u][2],表示选(dp[][1])或 ...

  3. HDU 2412 Farm Irrigation

    题目: Benny has a spacious farm land to irrigate. The farm land is a rectangle, and is divided into a ...

  4. hdu 2412 树形DP

    思路:对于最大的人数很容易想到,就直接dp.但对于最大值是否唯一就需要应用辅助数组,isOnly[i][0]表示dp[i][0]是否唯一,同理isOnly[i][1]. 那么当(dp[v][0]> ...

  5. 【树形DP】 HDU 2412 Party at Hali-Bula

    给出根节点(BOSS) 然后还有N-1个边  A B 由B指向A (B为A 的上司) 每次仅仅能选择这个关系中的当中一个 求最多选几个点 而且输出是不是唯一的 重点推断是否唯一: 1.若下属不去和去都 ...

  6. hdu 2412 Party at Hali-Bula 经典树形DP

    Party at Hali-Bula Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  7. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  9. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

随机推荐

  1. photoshop移动工具

    1*移动工具 V  移动图层  若果移动选区相当于剪切 2*

  2. drupal7 分页

    $output = ""; $query = db_select('feedback','f')->extend('PagerDefault');//->extend( ...

  3. git push origin master 报错 remote rejected] master -> master (branch is currently checked out)

    解决办法: 977down vote You can simply convert your remote repository to bare repository (there is no wor ...

  4. 转:SSH原理与运用(二):远程操作与端口转发

    作者:阮一峰 (Image credit: Tony Narlock) 七.远程操作 SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作. 上一节的操作,就是一个例子: $ ssh use ...

  5. Oracle表和表数据恢复

    Oracle数据库表及表数据的恢复 1. 表恢复 对误删的表,只要没有使用 purge 永久删除选项,那么基本上是能从 flashback table 区恢复回来的. 数据表和其中的数据都是可以恢复回 ...

  6. 转换流--InputStreamReader ,OutputStreamWriter

    BufferedReader 字符流,只能装饰字符流,不能装饰字节流.有个重要且好用的方法是readLine()整行读取字符. 但是InputStream是字节流,没有resdLine方法,那么字节流 ...

  7. UVA - 11400 Lighting System Design (区间DP)

    这个问题有两个点需要注意: 1. 对于一种灯泡,要么全换,要么全不换. 证明: 设一种灯泡单价为p1,电池价格为k1,共需要L个,若把L1个灯泡换成单价为p2,电池为k2的灯泡,产生的总花费为p1*L ...

  8. 学习笔记——适配器模式Adapter

    适配器模式适用于将不一致的接口转换为一致的接口. 比如,去香港玩儿,带上了自己的笔记本电脑,结果晚上插电时就抓瞎了,电源插孔与插座不一致.WTF…… 插座是酒店装好的,不可能拆了换一个,电源是自己的, ...

  9. Mysql主从备份、主主备份

    简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做 ...

  10. MoQ(基于.net3.5,c#3.0的mock框架)简单介绍

    我们在做单元测试的时候,常常困扰于数据的持久化问题,很多情况下我们不希望单元测试影响到数据库中的内容,而且受数据库的影响有时我们的单元测试的速度会很慢,所以我们往往希望将持久化部分隔离开,做单元测试的 ...