CF1228F
写了一个特别麻烦的做法
首先一共有三种情况:1.删掉一个叶子,2.删掉根的一个儿子,3.其他的节点
第一种情况会有两个度数为2的节点,第二种情况没有度数为2的节点,第三种情况会有一个度数为4的节点
然后从现在开始降智..
首先求一下每个点的size,从被删除的点开始一直到根的size都会比正常情况少1,如果遇见既不是正常大小也不是正常大小-1的点直接输出0
如果大小不对的点个数不对输出0
这样就可以处理1和3.单独特判掉2就行
官方题解只要找一下直径就能盘段是不是0
有道理。。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int M = 1000001;
int n,m,k,a[M],s[M],N,ver[M],nex[M],head[M],cnt,dp[M],vis[M],S2,S4,x,y,d[M];
queue<int>q,rs;
void add(int x,int y)
{
ver[++cnt]=y, nex[cnt]=head[x], head[x]=cnt;
ver[++cnt]=x, nex[cnt]=head[y], head[y]=cnt;
}
int main()
{
scanf("%d",&N); n=(1<<N)-1;
if(N==2)
{
printf("2\n1 2");
return 0;
}
for(int i=1;i<=n-2;i++)
{
scanf("%d%d",&x,&y);
d[x]++, d[y]++;
add(x,y);
}
for(int i=1;i<n;i++)
{
s[i]=1;
if(d[i]==2) S2++;
if(d[i]==4 && S4) { printf("0"); return 0; }
if(d[i]==4) S4=i;
if(d[i]>4) { printf("0"); return 0; }
}
if(S2==2 && S4) { printf("0"); return 0; }
for(int i=1;i<=n-1;i++) if(d[i]==1) s[i]=1,q.push(i);
while(q.size())
{
int x=q.front(); q.pop();
vis[x]=1;
for(int i=head[x];i;i=nex[i])
{
if(vis[ver[i]]) continue;
s[ver[i]]+=s[x]; d[ver[i]]--;
if(d[ver[i]]==1)q.push(ver[i]);
}
}
int x=0,S=0;
for(int i=1;i<n;i++)
{
int k=s[i]+2,g=s[i]+1;
if((g & -g) == g) continue;
if((k & -k) !=k) { printf("0"); return 0; }
if(!x || s[i]<s[x]) x=i;
S++;
}
if(!S2)
{
int B=0;
for(int i=1;i<n;i++) if(s[i]==(n-1)/2) B=i;
if(B)
{
printf("2\n");
printf("%d %d",min(x,B),max(x,B));
return 0;
}
}
int k=s[x]+2,t=-1;
while(k) k>>=1, t++;
if(S!=N-t+1) { printf("0"); return 0; }
if(x) {printf("1\n%d",x); return 0;}
printf("2\n");
for(int i=1;i<n;i++)
{
if(s[i]==(n-1)/2) printf("%d ",i);
}
}
CF1228F的更多相关文章
- CF1228F One Node is Gone
题目链接 问题分析 这题感觉就是有很多种方法,然后一种都写不明白-- 首先分为3种情况: 删了根节点下的一个节点,对应两个答案: 删了一个叶节点,对应一个答案: 删了一个其他节点,对应一个答案. 可以 ...
- 在$CF$水题の记录
CF1158C CF1163E update after CF1173 很好,我!expert!掉rating了!! 成为pupil指日可待== 下次要记得合理安排时间== ps.一道题都没写的\(a ...
随机推荐
- 【Nacos】数据一致性
转自:https://blog.csdn.net/liyanan21/article/details/89320872 目录 一.Raft算法 二.Nacos中Raft部分源码 init() 1. 获 ...
- 52-python基础-python3-列表-常用列表方法- reverse()方法
reverse()方法 永久性地修改列表元素的排列顺序,但可随时恢复到原来的排列顺序,为此只需对列表再次调用reverse() 即可. 实例:
- 在$CF$水题の记录
CF1158C CF1163E update after CF1173 很好,我!expert!掉rating了!! 成为pupil指日可待== 下次要记得合理安排时间== ps.一道题都没写的\(a ...
- 同事遇到了一个问题(在DllMain函数之前抢控制权)
同事有个需求,他的进程会加载一个DLL,他需要在那个DLL的DllMain函数执行之前控制DLL,修改DLL的内存. 以上工作要求全部在应用层执行. 这个其实有点悲剧. 因为这个需求其实有点坑,因为需 ...
- linux的CentOS、Ubuntu、Debian三个比较异同
Linux有非常多的发行版本,从性质上划分,大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本.商业版本以Redhat为代表,开源社区版本则以debian为代表.这些版本各有不同的特点,在 ...
- React 全新的 Context API
Context API 可以说是 React 中最有趣的一个特性了.一方面很多流行的框架(例如react-redux.mobx-react.react-router等)都在使用它:另一方面官方文档中却 ...
- Codeforces 1186F - Vus the Cossack and a Graph 模拟乱搞/欧拉回路
题意:给你一张无向图,要求对这张图进行删边操作,要求删边之后的图的总边数 >= ceil((n + m) / 2), 每个点的度数 >= ceil(deg[i] / 2).(deg[i]是 ...
- 前端导出excel表格
前言近期项目有个新需求--将折线图表的数据加一个下载成excel表格的功能.以前下载功能都是调后台接口的,但是这个迭代,后台压力比较重,部分就交给了前端自己实现,下面就记录一下前端如何实现excel表 ...
- JavaScript 六种继承方式
title: JS的六种继承方式 date: 2017-06-27 05:55:49 tags: JS categories: 学习 --- 继承是面向对象编程中又一非常重要的概念,JavaScrip ...
- Adobe 2019 全家桶 Mac 版(最新版)
经过不断的改革换新,Adobe2019系列已经全面来袭.在软件更新的同时,激活工具也不断的完善!小编带来的是Adobe2019注册机专门为同系列软件量身定做的注册破解工具! ▌软件下载-关注公众号 ...