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 ...
随机推荐
- 讲真,下次打死我也不敢随便改serialVersionUID了
讲真,下次打死我也不敢随便改serialVersionUID了 码农沉思录 码农沉思录 微信号 code-thinker 功能介绍 笔者为国内某知名企业不知名码农,专注Java Web领域多年,有丰富 ...
- sublime中使用插件anaconda而在代码中出现方框
这个标志是说不符合PEP8标准,比如使用了Tab做缩进:一行过长等问题. 可以在可以在 Sublime > Preferences > Package Settings > Anac ...
- elasticsearch 父子关系
ElasticSearch 中的Parent-Child关系和nested模型是相似的, 两个都可以用于复杂的数据结构中,区别是 nested 类型的文档是把所有的实体聚合到一个文档中而Parent- ...
- 【知识强化】第五章 传输层 5.2 UDP协议
这节课我们来学习一下UDP协议. 那在上节课呢我们学了这样一个打油诗. 啊,就是传输层有两个好兄弟,大哥TCP和二弟UDP.大哥很靠谱,二弟不靠谱.那只要说到UDP协议我们就要知道它的一个重要的特点, ...
- GeneXus笔记本—城市级联下拉
最近在交流GeneXus的时候 总是会遇到有城市级联下拉的问题 这里就简单做几种方式 供大家参考参考 第一种就是直接绑定关联信息然后在后者的条件模块设定条件即可 具体如下: 首先我们所需要的表为pro ...
- JS 富文本编码、解码
第一种 escape()和unescape()方法 escape() 方法能够把 ASCII之外的所有字符转换为 %xx 或 %uxxxx(x表示十六进制的数字)的转义序列.从 \u000 到 \u0 ...
- 四、IDS4建立Authorization server和Client
一.准备 创建一个名为QuickstartIdentityServer的ASP.NET Core Web 空项目(asp.net core 2.2),端口5000创建一个名为Api的ASP.NET C ...
- Sublime Text 3 - there are no packages available for installation 解决方法
解决方法: 1. 下载一个channel_v3.json , 提取码: n2vc 2. 进入以下路径的设置界面 3. 添加代码 , 文件路径以各自下载保存路径为准 ( 重启sublime, 搞定 ! ...
- 解决 'express' 不是内部或外部命令,也不是可运行的程序
express-generator >npm install -g express-generator 就可以了
- Es学习第一课,了解基本功能和概念
Elasticsearch作为这几年最流行的搜索引擎,越来越多的互联网企业都在采用它:作为java开发者来说,如果想进一步提高自己能力,同时也为了能够在实际工作中遇到搜索.存储问题多一个解决方案,学习 ...