UVA 1220 Party at Hali-Bula (树形DP)
求一棵数的最大独立集结点个数并判断方案是否唯一。
dp[i][j]表示以i为根的子树的最大独立集,j的取值为选和不选。
决策:
当选择i时,就不能选择它的子结点。
当不选i时,它的子结点可选可不选。
判断唯一性:当选择的某个子节点方案不唯一,父节点的方案就不唯一,或者某个子节点选或不选方案数一样。
转移顺序:按照拓扑序转移或dfs都可以。
#include<bits/stdc++.h>
using namespace std;
const int maxn = ;
const int pick = ;
const int drop = ; int d[maxn][];
bool f[maxn][];// NotUnique?
int fa[maxn];
int deg[maxn];
int n; void topo()
{
queue<int> q;
for(int i = ; i < n; i++){
d[i][pick] = ;
d[i][drop] = ;
f[i][pick] = f[i][drop] = ;
if(deg[i] == ){
q.push(i);
}
} while(q.size()){
int u = q.front(); q.pop();
int p = fa[u];
int &a = d[u][drop], &b = d[u][pick];
d[p][pick] += a;
f[p][pick] |= f[u][drop];
if(a>b){
d[p][drop] += a;
f[p][drop] |= f[u][drop];
}else {
d[p][drop] += b;
f[p][drop] |= a == b || f[u][pick];
}
deg[p]--;
if(deg[p] == ) {
q.push(p);
}
}
} #define MP make_pair
#define PB push_back
#define fi first
#define se second
map<string,int> idx;
int idx_cnt;
int ID(string &x)
{
map<string,int>::iterator it = idx.find(x);
if(it != idx.end()) return it->se;
idx.insert(MP(x,idx_cnt));
return idx_cnt++;
} string name;
const int root = ;
bool read()
{
scanf("%d",&n);
if(n == ) return false;
idx.clear();
cin>>name;
idx.insert(MP(name,root)); idx_cnt = ;
fill(deg,deg+n,);
for(int i = ; i < n; i++){
cin>>name;
int v = ID(name);
cin>>name;
int p = ID(name);
fa[v] = p;
deg[p]++;
}
return true;
} int main()
{
//freopen("in.txt","r",stdin);
fa[root] = -;
while(read()){
topo();
int k = d[root][pick]>d[root][drop]?pick:drop;
bool flag = d[root][k] != d[root][k^] && !f[root][k];
printf("%d ",d[root][k]);
if(flag) puts("Yes");
else puts("No");
}
return ;
}
UVA 1220 Party at Hali-Bula (树形DP)的更多相关文章
- UVa 1220 - Party at Hali-Bula(树形DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVa 1220 Party at Hali-Bula (树形DP,最大独立集)
题意:公司有 n 个人形成一个树形结构,除了老板都有唯一的一个直系上司,要求选尽量多的人,但不能同时选一人上和他的直系上司,问最多能选多少人,并且是不是唯一的方案. 析:这个题几乎就是树的最大的独立集 ...
- UVA - 1220 Party at Hali-Bula (树形DP)
有 n 个员工,n-1个从属关系. 不能同时选择某个员工和他的直接上司,问最多可以选多少人,以及选法是否唯一. 树上的最大独立集问题.只不过多了一个判断唯一性. dp[u][0]表示不选这个点的状态, ...
- 【UVA 1380】 A Scheduling Problem (树形DP)
A Scheduling Problem Description There is a set of jobs, say x1, x2,..., xn <tex2html_verbatim_ ...
- UVA Live Archive 4015 Cave (树形dp,分组背包)
和Heroes Of Might And Magic 相似,题目的询问是dp的一个副产物. 距离是不好表示成状态的,但是可以换一个角度想,如果知道了从一个点向子树走k个结点的最短距离, 那么就可以回答 ...
- UVa 10859 - Placing Lampposts 树形DP 难度: 2
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- UVA - 1218 Perfect Service(树形dp)
题目链接:id=36043">UVA - 1218 Perfect Service 题意 有n台电脑.互相以无根树的方式连接,现要将当中一部分电脑作为server,且要求每台电脑必须连 ...
- 树形DP UVA 1292 Strategic game
题目传送门 /* 题解:选择一个点,它相邻的点都当做被选择,问最少选择多少点将所有点都被选择 树形DP:dp[i][0/1]表示当前点选或不选,如果选,相邻的点可选可不选,取最小值 */ /***** ...
- uva 1292 树形dp
UVA 1292 - Strategic game 守卫城市,城市由n个点和n-1条边组成的树,要求在点上安排士兵,守卫与点相连的边.问最少要安排多少士兵. 典型的树形dp.每一个点有两个状态: dp ...
- UVA 1484 - Alice and Bob's Trip(树形DP)
题目链接:1484 - Alice and Bob's Trip 题意:BOB和ALICE这对狗男女在一颗树上走,BOB先走,BOB要尽量使得总路径权和大,ALICE要小,可是有个条件,就是路径权值总 ...
随机推荐
- 使用you-get下载网页小视频(实际上你可以下载任意你想要的web网页中的内容)
1. 什么是you-get? You-Get是一个小型的命令行实用程序,用于从Web下载媒体内容(视频,音频,图像),如果没有其他方便的方法可以尝试使用you-get. 2.安装you-get 打开命 ...
- 如何将基于对话框的MFC工程改成基于BCG的
1.stdafx.h 加入如下内容.BCGCBProInc.h间接导入了lib. 2.应用程序类的父类由CWinApp改成CBCGPWinApp.构造函数增加如下代码: 3.对话框的父类有CDialo ...
- Spark 学习(三) maven 编译spark 源码
spark 源码编译 scala 版本2.11.4 os:ubuntu 14.04 64位 memery 3G spark :1.1.0 下载源码后解压 1 准备环境,安装jdk和scala,具体参考 ...
- 用shell脚本监控MySQL主从同步
企业面试题1:(生产实战案例):监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员.提示:如果没主从同步环境,可以用下面文本放到文件里读取来模拟:阶段1:开发一个守护进程脚本每30秒 ...
- luoguP3796[模板]AC自动机(加强版)
传送门 ac自动机模板,可能我写的ac自动机是有点问题的,所以跑的有些慢 暴力跳fail统计 代码: #include<cstdio> #include<iostream> # ...
- Bootstrap里的文件作用
Bootstrap里的文件分别表示什么?都有什么用? bootstrap.css bootstrap.min.css bootstrap-responsive.css bootstrap-respon ...
- Redis的分布式锁
一.锁的作用 当多线程执行某一业务时(特别是对数据的更新.新增)等操作,可能就会出现多个线程对同一条数据进行修改.其最终的结果一定与你期望的结果“不太一样”,这就与需要一把锁来控制线程排排队了 - j ...
- oracle tps
http://blog.csdn.net/nilxin/article/details/5812480 sample 1: 定义 TPS:Transactions Per Second(每秒传输的事物 ...
- Hadoop启动datanode失败,clusterId有问题
问题: 搭建伪Hadoop集群的时候,运行命令: hdfs namenode -format 格式化或者说初始化namenode. 然后用命令: start-dfs.sh 来启动hdfs时,jps发现 ...
- 调用submit()方式提交表单
今天在看高级程序设计时看到的这样一段话: 在以调用submit()方法的形式提交表单时,不会触发submit事件 写了一个小例子做了下测试,的确如此: <form id="fm&quo ...