【poj3342】 Party at Hali-Bula
http://poj.org/problem?id=3342 (题目链接)
题意
给出一棵树,要求在不存在两个节点相邻的条件下,选出尽可能多的节点,并且判断是否有多种选法。
Solution
很水的树形dp,2个月前的自己Wa的不要不要的,现在的自己1A。。
${f[i][0]}$表示${i}$不去的最大人数,${f[i][1]}$表示${i}$去的最大人数。关键是如何去判断方案的唯一性。
对于节点${x}$,我们分情况讨论。
1.${x}$去更优。${f[x][1]}$只能由${f[son[x]][0]}$转移过来,那么方案肯定是唯一的,所以我们直接去搜索${son[x]}$的儿子节点。
2.${x}$不去更优。${f[x][0]}$能由${f[son[x]][0]}$或者是${f[xon[x]][1]}$转移过来,而如果${f[x][0]}$的值可以由多种方案得到,那么必然是${x}$的某个儿子节点去和不去的人数相等。
3.${x}$去与不去的人数相等。那么直接返回1。。
至此,问题已经解决。
代码
// poj3342
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<string>
#include<cmath>
#include<map>
#define MOD 100003
#define inf 2147483640
#define LL long long
#define free(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout);
using namespace std; const int maxn=300;
struct edge {int to,next;}e[maxn<<1];
map<string,int> mp;
int head[maxn],f[maxn][2],cnt,n,m; void link(int u,int v) {
e[++cnt].to=v;e[cnt].next=head[u];head[u]=cnt;
}
void Init() {
mp.clear();cnt=n=0;
memset(head,0,sizeof(head));
memset(f,0,sizeof(f));
}
void dfs(int x) {
f[x][0]=0;f[x][1]=1;
for (int i=head[x];i;i=e[i].next) {
dfs(e[i].to);
f[x][0]+=max(f[e[i].to][1],f[e[i].to][0]);
f[x][1]+=f[e[i].to][0];
}
}
bool check(int x) {
if (f[x][0]==f[x][1]) return 0;
if (f[x][0]>f[x][1]) {
for (int i=head[x];i;i=e[i].next)
if (!check(e[i].to)) return 0;
}
else {
for (int i=head[x];i;i=e[i].next)
for (int j=head[e[i].to];j;j=e[j].next)
if (!check(e[j].to)) return 0;
}
return 1;
}
int main() {
while (scanf("%d",&m)!=EOF && m) {
Init();
string s1,s2;
cin>>s1;mp[s1]=(n=1);
for (int i=1;i<m;i++) {
cin>>s1>>s2;
if (!mp[s1]) mp[s1]=++n;
if (!mp[s2]) mp[s2]=++n;
link(mp[s2],mp[s1]);
}
dfs(1);
printf("%d %s\n",max(f[1][0],f[1][1]),check(1) ? "Yes" : "No");
}
return 0;
}
【poj3342】 Party at Hali-Bula的更多相关文章
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- 【原】谈谈对Objective-C中代理模式的误解
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
- 【原】FMDB源码阅读(三)
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 【调侃】IOC前世今生
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
- Python高手之路【三】python基础之函数
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
- Python高手之路【一】初识python
Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...
- 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】
说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
随机推荐
- Java设计模式之-----工厂模式(简单工厂,抽象工厂)
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
- android values目录的读取优先级
android项目新建时会有一个values目录(高版本会增加values-v11,values-v14目录),该目录用于存放显示相的配置数据的定义文件,如strings.xml, style.xml ...
- Android开发之旅: Intents和Intent Filters(理论部分)
引言 大部分移动设备平台上的应用程序都运行在他们自己的沙盒中.他们彼此之间互相隔离,并且严格限制应用程序与硬件和原始组件之间的交互. 我们知道交流是多么的重要,作为一个孤岛没有交流的东西,一定毫无意义 ...
- HTTP协议详细总结
HTTP超文本传输协议,是WWW上应用的最多的协议.了解和掌握HTTP协议是对程序人员的基本要求. 转载请注明出处 http://www.cnblogs.com/zrtqsk/p/3746891.ht ...
- js 判断一组日期是否是连续的
文章同步自个人博客:http://www.52cik.com/2016/07/10/consecutive-dates.html 这是群里一朋友问的问题,当时我说判断下 day 是否相邻即可,后来细想 ...
- 写一个 nodejs npm应用 - webhere
前言.没图不说话,先上图. What's webhere? 有没有遇到这样的场景:写程序的时候,需要访问一个文件,这个文件 需要是放到一台web服务器上,但是你不是开发的web应用. 所以呢,你不得不 ...
- socket.io简单说明及在线抽奖demo
socket.io简单说明及在线抽奖demo socket.io 简介 Socket.IO可以实现实时双向的基于事件的通信. 它适用于各种平台,浏览器或设备,也同样注重可靠性和速度. socket.i ...
- 什么是viewport,为什么需要viewport
viewport:视口,视觉窗口,显示区域.在显示面积上手机屏幕相对桌面显示器要小很多,在几年前(现在也如此)大部分网站都是为桌面显示器浏览而设计,很少考虑到适应手机屏幕,所以如果用手机浏览大多网站时 ...
- C 语言学习的第 02 课:C 语言的开发环境
工欲善其事,必先利其器.不知道还是不是记得上一篇文章中说到的,计算机本身是一个数据输入及输出的设备.所以,为了将你大脑中的各种 idea 输入到电脑,且最终生成能够执行的程序,总是要预备点什么的. 通 ...
- HFS汉化版|简易HTTP服务器
专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,只要解压缩后执 ...