【Uva 1220】Party at Hali-Bula
【Link】:https://cn.vjudge.net/contest/170078#problem/M
【Description】
求一个树的最大独立子集;
(即树的一个点集,这个点集中任意两个点,都不相连)
然后,问你这个点集是不是唯一的;
【Solution】
设d[i][0],f[i][0],表示以i为根节点的子树在i节点不选的时候的最大独立子集,f[i][0],表示在不选i的时候,这个最大独立子集是否唯一;
d[i][1],f[i][1]的定义类似,只不过变成了i这个点不选;
对于第i个节点要选的情况;
儿子节点只能都不选
d[i][0]=∑d[j][1]
(j为i的儿子,当f[j][1]全部为true,f[i][0]才为true)
对于第i个节点不选的情况
儿子节点可选、可不选
d[i][1]=∑max(d[j][0],d[j][1])
这里,如果d[j][0]==d[j][1],或者d[j][0]和d[j][1]中那个较大值的f值为false;
则f[i][1]为false;否则为true;
最后,在根节点1上面加一个0节点
直接输出d[0][1];
->因为0节点不选的话,对应1节点可选可不选;
然后根据f[0][1]判断YES和NO;
【NumberOf WA】
1
【Reviw】
d[y][0]写成了dy[0]…
然后dy是那个模板里的四个方向数组….
【Code】
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define Open() freopen("F:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0)
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 210;
int n,cnt;
string boss;
map <string,int> dic;
vector <int> g[N];
int d[N][2];
bool f[N][2];
void dfs(int x){
d[x][0] = 1,f[x][0] = true;
d[x][1] = 0,f[x][1] = true;
int len = g[x].size();
rep1(i,0,len-1){
int y = g[x][i];
dfs(y);
d[x][0]+=d[y][1],f[x][0] = f[x][0] && f[y][1];
if (d[y][0]==d[y][1]) f[x][1] = false,d[x][1] += d[y][1];
if (d[y][0] > d[y][1]){
d[x][1] += d[y][0];
if (!f[y][0]) f[x][1] = false;
}
if (d[y][0] < d[y][1]){
d[x][1] += d[y][1];
if (!f[y][1]) f[x][1] = false;
}
}
}
int main(){
//Open();
Close();
while (cin >> n && n){
rep1(i,0,n) g[i].clear();
cnt = 0;
dic.clear();
cin >> boss;
dic[boss] = ++cnt;
string x,y;
rep1(i,1,n-1){
cin >> x >> y;
if (dic[x]==0) dic[x]=++cnt;
if (dic[y]==0) dic[y]=++cnt;
int xx = dic[x],yy = dic[y];
g[yy].pb(xx);
}
g[0].pb(1);
dfs(0);
cout << d[0][1] <<' ';
if (f[0][1])
cout <<"Yes"<<endl;
else
cout <<"No"<<endl;
}
return 0;
}
【Uva 1220】Party at Hali-Bula的更多相关文章
- 【巧妙算法系列】【Uva 11464】 - Even Parity 偶数矩阵
偶数矩阵(Even Parity, UVa 11464) 给你一个n×n的01矩阵(每个元素非0即1),你的任务是把尽量少的0变成1,使得每个元素的上.下.左.右的元素(如果存在的话)之和均为偶数.比 ...
- 【贪心+中位数】【UVa 11300】 分金币
(解方程建模+中位数求最短累积位移) 分金币(Spreading the Wealth, UVa 11300) 圆桌旁坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一 ...
- 【UVa 10881】Piotr's Ants
Piotr's Ants Porsition:Uva 10881 白书P9 中文改编题:[T^T][FJUT]第二届新生赛真S题地震了 "One thing is for certain: ...
- 【UVa 116】Unidirectional TSP
[Link]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 【UVa 1347】Tour
[Link]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 【UVA 437】The Tower of Babylon(记忆化搜索写法)
[题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 【uva 1025】A Spy in the Metro
[题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...
- 【Uva 11584】Partitioning by Palindromes
[Link]:https://cn.vjudge.net/contest/170078#problem/G [Description] 给你若干个只由小写字母组成的字符串; 问你,这个字符串,最少能由 ...
- 【Uva 11400】Lighting System Design
[Link]: [Description] 你要构建一个供电系统; 给你n种灯泡来构建这么一个系统; 每种灯泡有4个参数 1.灯泡的工作电压 2.灯泡的所需的电源的花费(只要买一个电源就能供这种灯泡的 ...
随机推荐
- CodeForces 1152D Neko and Aki's Prank
说明 Catalan(i) 表示卡特兰数的第 i 项. 题目链接:http://codeforces.com/problemset/problem/1152/C 题目大意 有 n 个左括号和 n 个右 ...
- 自动化测试工具2-testcomplete
今天来说说testcomplete的使用 录了一个简单案例视频,网址如下:https://v.qq.com/x/page/f05116a062y.html 第一步是创建一个工程: 输入工程名,和选择工 ...
- grep 的一些常用用法
打印匹配到的上下5行 grep -C 5 'root' /etc/passwd 上下5行 grep -A 5 'root' /etc/passwd afte ...
- C++ 系列:iostream 的用途与局限
转载自http://www.cnblogs.com/Solstice/archive/2011/07/17/2108715.html 本文主要考虑 x86 Linux 平台,不考虑跨平台的可移植性,也 ...
- Apocalypse Someday
Apocalypse Someday 定义一个数是合法的,当且仅当中间出现至少一个连续的大于三个的6,求第x个合法的数,\(x\leq 50,000,000\) 解 首先,注意到求第几个,即想到试填法 ...
- leetcode-63-不同路径②
题目描述: 第一次提交: class Solution: def uniquePathsWithObstacles(self, obstacleGrid) : m = len(obstacleGrid ...
- vsftp 被动模式配置
直接复制粘切过来就能用 这里只讲下配置,安装方法可以直接yum 配置文件修改 anonymous_enable=NO #关闭匿名用户 xferlog_file=/var/log/vsftpd.log ...
- 关于TMDS
https://en.wikipedia.org/wiki/Transition-minimized_differential_signaling TMDS,Transition Minimized ...
- JS预解析与变量提升
预解析 JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的.JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程 预解析过程 ...
- Parse:App开发必备 让应用开发效率提高上百倍
Parse一个应用开发工具, 是由Y Combinator所孵化的创业公司.使用Parse能把效率提高10倍到100倍.通常情况下,从开发用户到推广用户需要花几周时间,用了Parse则只需几小时.[U ...