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要小,可是有个条件,就是路径权值总 ...
随机推荐
- 创建Sitemap文件供搜索引擎使用
以下内容转载自 http://www.cnblogs.com/webtrados/archive/2009/12/29/1635305.html 如何创建Sitemap文件 Sitemap的格式有XM ...
- SqlServer2012——快照
1.数据库快照 优点: 维护历史数据以生成报表.由于数据库快照可提供数据库的静态视图,因而可以通过快照访问特定时间点的数据. 将查询实施在数据库的快照上,可以释放主体数据库上的资源. 数据库快照的限制 ...
- 如何在html中引入jsx文件
不使用webpack工具做react项目 1.引入react相关js文件 <script src="https://cdn.staticfile.org/react/16.4.0/um ...
- 清除display:inline-block元素换行符间隙font-size:0;
font-size:0; 清除display:inline-block元素换行符间隙 看例子: css: .dd {background-color: #ddd;} .dd2 {background- ...
- web开发菜鸟应该如何向前端大神提问题(一次性把问题描述清楚)
1. 问题的环境和背景这里的背景一般包括,是针对桌面浏览器还是移动端开发?如果是桌面浏览器,则兼容性要求如何?比方说,你来咨询父级是百分比高度的垂直居中效果,你就要说明,你这个效果是需要兼容IE7+还 ...
- 算法学习--Day6
题目描述 实现一个加法器,使其能够输出a+b的值. 输入描述: 输入包括两个数a和b,其中a和b的位数不超过1000位. 输出描述: 可能有多组测试数据,对于每组数据, 输出a+b的值. 示例1 输入 ...
- 2014-5-16 NOIP模拟赛
Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N≤1 ...
- 日志组件Log2Net的介绍和使用(附源码开源地址)
Log2Net是一个用于收集日志到数据库或文件的组件,支持.NET和.NetCore平台. 此组件自动收集系统的运行日志(服务器运行情况.在线人数等).异常日志.程序员还可以添加自定义日志. 该组件支 ...
- iOS 7 隐藏特性
当 iOS7 刚发布的时候,全世界的苹果开发人员都立马尝试着去编译他们的app,接着再花上数月的时间来修复任何出现的故障,甚至重做app.这样的结果,使得人们根本无暇去探究 iOS7 所带来的新东西. ...
- flask_context
定义全局的钩子函数 有的时候在处理请求之前和之后,执行某些特定的代码是很有用的,这就用到了请求钩子 例如在请求之前创建数据库连接或者redis连接:或者是系统里面用户请求处理之前先验证用户的身份,是否 ...