题目传送门:https://agc014.contest.atcoder.jp/tasks/agc014_d

题目翻译

给你一棵树,每次任选一个点染色,先手染白色,后手染黑色。如果最后存在一个白色的点与其相连的点都是白色的,就算先手胜利,否则后手胜利。两人绝顶聪明,\(n\leqslant 10^5\)

题解

假设这颗树存在完美匹配,那么不管先手染哪一个点,后手都能将与其匹配的点染成黑色。也就是说,存在完美匹配的话后手一定胜利。

假设不存在完美匹配,先手每次可以选择一个叶子结点的父亲染色,然后后手肯定只能被迫把叶子结点染成黑色。染完之后这俩点已经没有影响了就可以直接删掉了。因为不存在完美匹配,所以最后肯定会剩下孤立的点,先手把它们任意一个染成白色就赢了。这道题就变成了判断一棵树是否存在完美匹配的题了。

时间复杂度:\(O(n)\)

空间复杂度:\(O(n)\)

代码如下:

#include <cstdio>
using namespace std; const int maxn=1e5+5; int n,tot;
int now[maxn],pre[maxn<<1],son[maxn<<1]; int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
} void add(int a,int b) {
pre[++tot]=now[a];
now[a]=tot,son[tot]=b;
} int dfs(int fa,int u) {
int res=0;
for(int p=now[u],v=son[p];p;p=pre[p],v=son[p])
if(v!=fa)res+=dfs(u,v);
if(res>=2)return res;
else return res^1;
} int main() {
n=read();
for(int i=1;i<n;i++) {
int a=read(),b=read();
add(a,b),add(b,a);
}
if(dfs(0,1))puts("First");
else puts("Second");
return 0;
}

最新文章

  1. WordPress一键部署网站
  2. python——线程与多线程进阶
  3. Reverse链表 递归实现
  4. APP数据接口开发的一些经验
  5. SmartPointer Smar指针
  6. Java多线程性能优化
  7. SQL Server 2012 内存管理 (memory management) 改进
  8. Sublime Text 插件 autoprefixer
  9. Android写入文件操作权限
  10. 『HTML5梦幻之旅』-缤纷多姿的烟花效果
  11. 2014-CVTE网测部分软件技术测试题及答案
  12. java线程(四)
  13. 程序员大牛 Jeff Atwood 的两本中文书
  14. 咸鱼入门到放弃11--Servlet+JSP+JavaBean开发模式
  15. Vim 利剑常磨,见血封喉
  16. C#中委托
  17. yarn 学习 小记
  18. Unhandled Exception: System.BadImageFormatException: Could not load file or assembly (2008R2配置x64website)
  19. “医疗信息化行业之中的联发科”- 我们在医疗行业中的定位及目标 想做一个面对中小企业的专业上游软件供应商 台湾联发科技颠覆掉的是一个封闭的手机产业系统 解决方案,即AgileHIS.NET数字化医院基础方案
  20. 跟bWAPP学WEB安全(PHP代码)--SQL注入的一些技巧

热门文章

  1. rtems 4.11 工具链
  2. 触发器 (Delete Update)
  3. 讲真,你是因为什么才买华为P20系列手机!
  4. MySQL5.7.18 备份、Mysqldump,mysqlpump,xtrabackup,innobackupex 全量,增量备份,数据导入导出
  5. 初识vue-01
  6. 研究下JavaScript中的Rest參数和參数默认值
  7. Epplus使用技巧
  8. Python中属性
  9. 去ioe
  10. BZOJ2328: [HNOI2011]赛车游戏