【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的所有方方面面,比 ...
随机推荐
- Centos5.8 安装 MySQL5.6.19
查看已经安装的mysql: sudo yum list installed |grep mysql 删除 sudo yum remove mysql 安装 sudo rpm -ivh MySQL-se ...
- Java中run(), start(), join(), wait(), yield(), sleep()的使用
run(), start(), join(), yield(), sleep() 这些是多线程中常用到的方法. run(): 每个Thread中需要实现的方法, 如果直接调用的话, 会是和单线程一样的 ...
- quartz.net 项目无法加载的问题
最近尝试试用一下quartz.net 做任务调度用. 下载了源代码后打开解决方案发现项目无法加载.错误如下 未找到导入的项目“C:\Users\****\Desktop\Quartz.NET-2.1. ...
- JS事件详解
hello,我是沐晴,最近呢,来总结一下 JS中的常用的事件,希望我们都能一起查漏补缺. 焦点事件 焦点事件在表单中经常用到,那什么是焦点呢?比如我们文本框里面的有光标的时候,就是获得了焦点,我们就可 ...
- C#根据当前时间获取周,月,季度,年度等时间段的起止时间
最近有个统计分布的需求,需要按统计本周,上周,本月,上月,本季度,上季度,本年度,上年度等时间统计分布趋势,所以这里就涉及到计算周,月,季度,年度等的起止时间了,下面总结一下C#中关于根据当前时间获取 ...
- Linux vmstat命令实战详解
vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况.这个命令是我查看Linux/Unix最 ...
- NPOI2.0学习(一)
引用空间 using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; 创建工作簿(workbook)和sheet HSSFWorkbook wk = new ...
- exgcd,求乘法逆元
procedure exgcd(a,b:int64); var t:longint; begin then begin x:=;y:=; exit; end else exgcd(b,a mod b) ...
- 将Table表格导出到Excel
1.导出当前页 效果如下: 前台代码: @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta nam ...
- 0930MySQL中实现高性能高并发计数器方案(例如文章点击数)
转自http://www.jb51.net/article/56656.htm 这篇文章主要介绍了MySQL中实现高性能高并发计数器方案,本文中的计数器是指如文章的点击数.喜欢数.浏览次数等,需要的朋 ...