UVA - 1220 Party at Hali-Bula 树的最大独立集
题意: 给定n个人,存在上下级关系,每个人只有一个上级,求最大独立集。并判断最大独立集是否唯一
思路:d[i][0]表示以i为根的子树中,不选择第i个节点的最大独立集,f[i][0]表示以i为根的子树中,不选择第i个节点的方案是否唯一。同理,d[i][1]和f[i][1]就是选择第i个节点的情况。
状态转移:d[i][0] =
∑max(d[v][0], d[v][1]), d[i][1] =
∑d[v][0];
唯一性的转移方程见代码:
if(k == 1) { //选择节点u d[u][k] += dfs(v, 0); //不选择子节点 if(!f[v][0]) f[u][k] = 0; } else { d[u][k] += max(dfs(v, 1), dfs(v, 0)); if(d[v][0] == d[v][1]) f[u][k] = 0; else if(d[v][0] > d[v][1] && !f[v][0]) f[u][k] = 0; else if(d[v][1] > d[v][0] && !f[v][1]) f[u][k] = 0; }
AC代码:
#include<cstdio> #include<algorithm> #include<cstring> #include<utility> #include<string> #include<iostream> #include<map> #include<set> #include<vector> #include<queue> #include<stack> using namespace std; #define eps 1e-10 #define inf 0x3f3f3f3f #define PI pair<int, int> const int maxn = 200 + 5; map<string, int>name; vector<int>son[maxn]; int cnt, d[maxn][2], f[maxn][2]; int getID(string &p) { if(!name.count(p)) name[p] = cnt++; return name[p]; } int dfs(int u, int k) { f[u][k] = 1; d[u][k] = k; int n = son[u].size(); for(int i = 0; i < n; ++i) { int v = son[u][i]; if(k == 1) { //选择节点u d[u][k] += dfs(v, 0); //不选择子节点 if(!f[v][0]) f[u][k] = 0; } else { d[u][k] += max(dfs(v, 1), dfs(v, 0)); if(d[v][0] == d[v][1]) f[u][k] = 0; else if(d[v][0] > d[v][1] && !f[v][0]) f[u][k] = 0; else if(d[v][1] > d[v][0] && !f[v][1]) f[u][k] = 0; } } return d[u][k]; } int main() { int n, root; string boss, kid; while(scanf("%d", &n) == 1 && n) { for(int i = 0; i < n; ++i) son[i].clear(); name.clear(); cnt = 0; cin >> boss; getID(boss); for(int i = 1; i < n; ++i) { cin >> kid >> boss; int par = getID(boss), kids = getID(kid); son[par].push_back(kids); } int ans = max(dfs(0, 0), dfs(0, 1)); printf("%d ", ans); int only = 1; if(d[0][0] == d[0][1]) only = 0; else if(d[0][0] > d[0][1] && !f[0][0]) only = 0; else if(d[0][1] > d[0][0] && !f[0][1]) only = 0; if(only) printf("Yes\n"); else printf("No\n"); } return 0; }
如有不当之处欢迎指出!
UVA - 1220 Party at Hali-Bula 树的最大独立集的更多相关文章
- UVa 1220 Hali-Bula的晚会(树的最大独立集)
https://vjudge.net/problem/UVA-1220 题意: 公司里有n个人形成一个树状结构,即除了老板以外每个员工都有唯一的直属上司.要求选尽量多的人,但不能同时选择一个人和他的直 ...
- 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 ...
- UVa 1220 - Party at Hali-Bula(树形DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- POJ 2342 树的最大独立集
题意:在树的最大独立集的基础上,加上权值.求最大. 分析: 采用刷表的方式写记忆化,考虑一个点选和不选,返回方式pair 型. 首先,无根树转有根树,dp(root). 注意的是:u不选,那么他的子节 ...
- POJ 3342 Party at Hali-Bula (树形dp 树的最大独立集 判多解 好题)
Party at Hali-Bula Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5660 Accepted: 202 ...
- 求树的最大独立集,最小点覆盖,最小支配集 贪心and树形dp
目录 求树的最大独立集,最小点覆盖,最小支配集 三个定义 贪心解法 树形DP解法 (有任何问题欢迎留言或私聊&&欢迎交流讨论哦 求树的最大独立集,最小点覆盖,最小支配集 三个定义 最大 ...
- HDU - 1520 Anniversary party (树的最大独立集)
Time limit :1000 ms :Memory limit :32768 kB: OS :Windows There is going to be a party to celebrate t ...
- UVa 1220 (树的最大独立集) Party at Hali-Bula
题意: 有一棵树,选出尽可能多的节点是的两两节点不相邻,即每个节点和他的子节点只能选一个.求符合方案的最大节点数,并最优方案判断是否唯一. 分析: d(u, 0)表示以u为根的子树中,不选u节点能得到 ...
- Uva 1220,Hali-Bula 的晚会
题目链接:https://uva.onlinejudge.org/external/12/1220.pdf 题意: 公司n个人,形成一个数状结构,选出最大独立集,并且看是否是唯一解. 分析: d(i) ...
随机推荐
- 爬虫_网页url设计
为什么需要网页URL设计? 每个url不同的结构代表着不同的网页模块和信息的展现形式,为了方便维护与管理 网页url怎么设计? 分层: 主域名,子域名 一般形式为: 主域名: www.job.com ...
- 转-Web Service中三种发送接受协议SOAP、http get、http post
原文链接:web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 一.web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 在web服务中,有三种可供选择的发 ...
- maven插件本地化安装
mvn install:install-file -Dfile="D:\maven\repository\com\tc\itfarm-api\1.0.0-SNAPSHOT\itfarm-ap ...
- java常用类--系统相关
java提供了System类和Runtime类来与程序的运行平台进行交互. System类 System类代表java程序的运行平台,程序不能创建这个类的对象,System类提供了一些类field和方 ...
- mysql关于char和varchar的查询效率问题
看了好多资料都说 varchar(size) 可变长度的字符值,节省空间,查询效率低 char(size) 固定长度的字符值,浪费空间,查询效率高 但是实际测试 char(100) varcha ...
- zabbix_sender用法实例
环境centos6.8 zabbix版本3.2.4 需求: 要远程监控一台服务器A,但只能通过远程服务器连接本地服务器B,但B不能主动连A(因为A没有固定公网ip) 使用了zabbix_agent的a ...
- 2018-02-03-jekyll框架下的post如何显示图片
layout: post title: 2018-02-03-jekyll框架下的post如何显示图片 key: 20180203 tags: blog post modify_date: 2018- ...
- redis2 安装步骤备忘
编译 make MALLOC=jemalloc 开启后台进程 /opt/redis2/src/redis-server /opt/redis2/redis.conf 配置,后台驻守模式一定要开 vi ...
- androidstudio canary5一个bug
Android Studio最新开发版一直跟着升级.到Canary5的时候出了一个bug. app build.gradle添加自己编译的aar库,原本一直使用: compile(name:'ijkp ...
- ASM字节码框架学习之动态代理
ASM字节码操纵框架,可以直接以二进制的形式来来修改已经存在的类或者创建新的类.ASM封装了操作字节码的大部分细节,并提供了非常方便的接口来对字节码进行操作.ASM框架是全功能的,使用ASM字节码框架 ...