HDU 2412 Party at Hali-Bula
树形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的更多相关文章
- 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 ...
- hdu 2412 Party at Hali-Bula【树形dp】
HDU 2412 和poj 2342(hdu 1520)差不多,多了一个判断最优解是(Yes)否(No)唯一.关键问题也在这个判断最优解是否唯一上. 先定义dp[u][2],表示选(dp[][1])或 ...
- HDU 2412 Farm Irrigation
题目: Benny has a spacious farm land to irrigate. The farm land is a rectangle, and is divided into a ...
- hdu 2412 树形DP
思路:对于最大的人数很容易想到,就直接dp.但对于最大值是否唯一就需要应用辅助数组,isOnly[i][0]表示dp[i][0]是否唯一,同理isOnly[i][1]. 那么当(dp[v][0]> ...
- 【树形DP】 HDU 2412 Party at Hali-Bula
给出根节点(BOSS) 然后还有N-1个边 A B 由B指向A (B为A 的上司) 每次仅仅能选择这个关系中的当中一个 求最多选几个点 而且输出是不是唯一的 重点推断是否唯一: 1.若下属不去和去都 ...
- 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 ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
随机推荐
- photoshop移动工具
1*移动工具 V 移动图层 若果移动选区相当于剪切 2*
- CSS box-flex属性
http://www.zhangxinxu.com/wordpress/2010/12/css-box-flex属性,然后弹性盒子模型简介/ http://www.zhangxinxu.com/wor ...
- JPA 系列教程2-单表操作
JPA Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据.他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibe ...
- Spring Boot 系列教程5-热部署-devtools模块
devtools模块 devtools模块,是为开发者服务的一个模块.主要的功能就是代码修改后一般在5秒之内就会自动重新加载至服务器,相当于restart成功. 原理 简单原理 在发现代码有更改之后, ...
- Bootstrap学习 - 全局CSS样式
栅格Grid <!-行(row)”必须包含在 .container (固定宽度)或 .container-fluid (100% 宽度)中-> <div class="c ...
- Linux -- 统计文件的行数
统计单个文件有多少行 方法1: awk '{print NR}' test1.sh|tail -n1 方法2: awk 'END{print NR}' test1.sh 方法3: grep -n &q ...
- js插入节点appendChild和insertBefore
首先 从定义来理解 这两个方法: appendChild() 方法:可向节点的子节点列表的末尾添加新的子节点.语法:appendChild(newchild) insertBefore() 方法:可在 ...
- FileReader和BufferedReader的区别
1.FileReader不能一行行读 FileReader fr = null; try { fr = new FileReader(new File(path)); StringBuffer str ...
- struts2语法--error页面如何捕获?
如果地址栏输入了不带后缀或者action为后缀, 不存在的页面跳转到error.jsp: struts.xml配置" <package name="default" ...
- sql语句删除由于无主键导致完全重复的数据方法
sql语句删除由于无主键导致完全重复的数据方法 select distinct * into #Tmp from t_column drop table t_column select * into ...