树形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. Linq序列间的操作

    一.Union并集操作相同的数据只显示一次 二.Concact连接 相同的数据也会重复显示 三.except差集 我有的你没有的显示 四.intersect交集相同的显示 五.zip序列的合并 六.d ...

  2. Shell学习笔记 ——第一天

    1.程序第一行  指定执行Shell的程序 #!/bin/sh #!用来告诉系统它后面的参数是用来执行该文件的程序 2.在控制台输出信息 echo "Hello Shell" #! ...

  3. MVC 和 MVVM

    MVVM MVVM 是 Model-View-ViewModel 的简写,MVVM 模式和 MVC 模式一样,主要目的是分离视图(View)和模型(Model) MVC 回顾 MVC 结构图 MVC ...

  4. sql server获取当前年月日 时分秒

    获取当前年月日(字符串): ),) 获取当前时间的时分秒(':'隔开): ),) 将年月日时分秒拼接成一条字符串: ),)),),':','')

  5. UVALive - 3942 Remember the Word

    input 字符串s  1<=len(s)<=300000 n 1<=n<=4000 word1 word2 ... wordn 1<=len(wordi)<=10 ...

  6. CDialog上使用CToolBar+CReBar

    最经在做一些用户界面的东西,对话框上有很多按钮和组合框,全部加起来差不多有20多个吧,界面非常凌乱,最后决定用CToolBar + CReBar来重新设计界面,为什么选用这个呢?一是因为看到IE用的也 ...

  7. FRP 浅析

    一.Reactive? 请先看一个非常简单的小应用,它允许用户在一个搜索输入框里输入关键词,然后在其下方的结果区域实时显示从Flicker网站搜索得到的图片,当用户输入的关键词发生变化,显示的图片也会 ...

  8. Android Studio中配置及使用OpenCV示例

    Android Studio配置及使用OpenCV 前言:最近在做项目移植,项目较大,在Eclipse中配置的Jni及OpenCV环境没任何问题,但是迁移到Studio中就问题一大堆,网上也找了一些资 ...

  9. linux shell 远程执行命令

    经常要部署多台服务器上面的应用,如果一个个机器的登录太麻烦. 所有就想到编写一个脚本来部署不同的服务器 前提条件: 配置ssh免登陆 如果不会的请参加我的另外一篇文章 http://blog.csdn ...

  10. POJ 1365 Prime Land(整数拆分)

    题意:感觉题意不太好懂,题目并不难,就是给一些p和e,p是素数,e是指数,然后把这个数求出来,设为x,然后让我们逆过程输出x-1的素数拆分形式,形式与输入保持一致. 思路:素数打表以后正常拆分即可. ...