思路:

本质是求一个树上的最大匹配能否覆盖所有的点。

dfs遍历,用qian[]数组记录当前节点的子树内有几个没有匹配的点(初始化为-1因为可以匹配掉一个子树中未匹配的点),pipei[]数组记录当前节点是否匹配。如果一个点u的子节点有未匹配的,那么u可以匹配掉一个点,但是有多个未匹配的点,就得累积在u上。也就是说如果qian[]数组>0,那么子树中有未匹配的点,需要将该子树的根u标记为未匹配状态,使得u的父亲fu能知道u中有未匹配的点,从而使fu可以匹配。

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
vector<int>E[maxn];
bool pipei[maxn];
int qian[maxn];
void dfs(int u,int fu){
qian[u]=-1;
int cnt=0;
for(auto v:E[u]){
if(v==fu)continue;
dfs(v,u);
qian[u]+=max(qian[v],pipei[v]?0:1);
if(!pipei[v])cnt++;
}
if(!cnt||qian[u]>0)pipei[u]=0;
else pipei[u]=1;
return;
}
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<n;i++){
int u,v;
scanf("%d%d",&u,&v);
E[u].push_back(v);
E[v].push_back(u);
}
dfs(1,0);
if(qian[1]!=0){
printf("Alice\n"); }
else printf("Bob\n");
}

最新文章

  1. 23种设计模式--单例模式-Singleton
  2. swift 可选类型(optional)--- swift 入门
  3. java-并发-同步
  4. 【BZOJ3282】Tree LCT
  5. 说说Python中的闭包 - Closure
  6. Git学习(一) 版本号管理工具
  7. 一点BPXA的思考
  8. ckfinder 1
  9. ADODB.Connection 错误 &#39;800a0e7a&#39;
  10. windows phone 7 定位(获取经纬度),然后找到经纬度所在的位置(城市信息)
  11. MySQL索引类型
  12. (转载)ubuntu创建新用户并增加管…
  13. [转]oracle系统表v$session、v$sql字段说明
  14. lightoj 1025 区间dp
  15. [转帖]Oracle 12cR2使用经验
  16. C# 深拷贝对象实现
  17. PAT A1010.Radix 二分法
  18. 软件测试人员需要掌握的linux命令(二)
  19. 学习笔记之Anaconda / PyCharm
  20. Python开发【模块】:Requests(二)

热门文章

  1. 题解 P5265 【模板】多项式反三角函数
  2. vue框架中实现今天昨天前天最近时间
  3. express通过生成器
  4. Composer简介与下载安装
  5. HTTPS证书转换成PEM格式
  6. R语言——ggplot2补充知识点
  7. 12JSP进阶
  8. [sql 注入] 注入类型
  9. shell 操作mysql
  10. [php代码审计] php四种标记