【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.灯泡的所需的电源的花费(只要买一个电源就能供这种灯泡的 ...
随机推荐
- 基于Netty的RPC架构学习笔记(五):netty线程模型源码分析(二)
文章目录 小技巧(如何看开源框架的源码) 源码解析 阅读源码技巧 打印查看 通过打断点调试 查看调用栈 小技巧(如何看开源框架的源码) 一断点 二打印 三看调用栈 四搜索 源码解析 //设置nioso ...
- 基于Netty的RPC架构学习笔记(二):netty服务器
文章目录 简介 Netty服务端Hello World案例 举个
- day 87 DjangoRestFramework学习一之restful规范、APIview、解析器组件、Postman等
DjangoRestFramework学习一之restful规范.APIview.解析器组件.Postman等 本节目录 一 预备知识 二 restful规范 三 DRF的APIView和解析器组 ...
- Spring 源码学习——加载 Bean
继上次注册 bean 之后好久没更新,这两天有空查了查资料也自己看了看 spring BeanFactory 的 getBean(beanName); 这个方法.因时间有限不能像之前那样复制代码并一行 ...
- 2018ICPC焦作 D-Keiichi Tsuchiya the Drift King /// 几何
题目大意: https://nanti.jisuanke.com/t/34142 有一个弯道抽象成圆的一部分 车子抽象成矩形 漂移过程中矩形上边会与圆的圆心在同一条直线上 以右上点贴着弯道边缘进行漂移 ...
- Harry and magic string HDU - 5157 记录不相交的回文串对数
题意: 记录不相交的回文串对数 题解: 正着反着都来一遍回文树 用sum1[i] 表示到 i 位置,出现的回文串个数的前缀和 sun2[i]表示反着的个数 ans+=sum1[i-1]*sum2[i] ...
- Spring Cloud高级视频
Spring Cloud高级视频 第一章 微服务架构概述 第二章 开始使用Spring Cloud实战微服务 第三章 服务提供者与服务消费者 第四章 服务发现与服务注册 第五章 使用Hystrix保护 ...
- 用CSS做导航菜单的4个理由
导航结构在网站设计中是起到决定性作用的,导航菜单/栏常常通过颜色.排版.形状和一些图片来帮助网站创造更好的视觉和感受,它是网页设计的关键元素.虽然网站导航菜单的外观是网页设计中关系到整个设计成败与否的 ...
- kafka 入门
李克华 云计算高级群: 292870151 195907286 交流:Hadoop.NoSQL.分布式.lucene.solr.nutch kafka入门:简介.使用场景.设计原理.主要配置及集群搭 ...
- 关于soapui如何做安全测试
1.首先安装soapui5.1.2 第一步:运行SoapUI-Pro-x32-5.1.2_576024.exe文件,按照步骤安装成功: 第二步:拷贝Protection-4.6.jar到soapui安 ...