E. Fib-tree

题意:
给你一棵树,问是不是斐波那契树:
这棵树要满足
1.本身的结点个数为斐波那契数。
2.断掉一条边,变成两棵树,两棵树的大小分别都是斐波那契数。
问能不能通过不断断掉一条边(过程保证他是斐波那契树),把这颗树分解成大小n个为1的树。

题解:
树上一顿乱秀。
因为任意一种切法都可以。因为我们要把树切成大小为1的树,假设有两种可以切的边,现在不切,之后也得切,所以切任意一条都可以。
那么我们模拟提议操作即可。
首先先将斐波那契数映射到数组里面,以便于O(1)查询。
我们开始遍历树,用一个sz数组表示该结点的大小为多少,f数组表示该结点的父亲结点。
如果该结点大小和(n-该节点大小)都是斐波那契数,我们就把这个点记录下来,同时记录下这个点和它父亲连的边是哪条(存边方法为前向星),这样的话我们通过标记把这条边删掉即可(前向星存图i^1即为它的反边),然后分别对 分出来的两棵树进行同样的操作,直到全部分成大小为1的结点为止。


注意这里一点,我们找到分割边后,一棵树就会变成两颗,第一颗当前结点为跟的树,第二棵当前结点父亲结点为根的树。
是先去操作一棵树,再去操作另外一颗树,操作第一颗树的时候会导致当前结点的父亲f数组改变,所以我们需要用变量提前记录下该父亲节为哪个!

代码:

/*Keep on going Never give up*/
//#pragma GCC optimize(2)
#include<bits/stdc++.h>
//#include<iostream>
//#include<string>
//#include<cmath>
//#include<vector>
//#include<algorithm>
//#include<queue>
//#include<string.h>#define int long long
#define endl '\n'using namespace std;
const int maxn=2e6+10;
const int mo=1000;struct node{int v,next;
}edge[maxn];
int del[maxn];
int head[maxn],cnt;void add(int u,int v){edge[cnt].v=v;edge[cnt].next=head[u];head[u]=cnt++;
}
int fac[maxn],a[maxn],f[maxn],sz[maxn];int vt,pos;void dfs(int x,int fa,int siz,int ls){f[x]=fa;sz[x]=1;for(int i=head[x];~i;i=edge[i].next){int to=edge[i].v;if(to!=fa&&!del[i]){dfs(to,x,siz,i);sz[x]+=sz[to];}}if(fac[siz-sz[x]]&&fac[sz[x]]){vt=x;pos=ls;}
}void sol(int x,int n){if(n==1) return ;vt=0;dfs(x,0,n,-1);if(!vt){cout<<"No"<<endl;exit(0);}del[pos]=del[pos^1]=1;int vt1=f[vt],ssz=n-sz[vt];sol(vt,sz[vt]);sol(vt1,ssz);}signed main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);a[0]=a[1]=1;memset(fac,false,sizeof fac);memset(head,-1,sizeof head);for(int i=2;i<50;i++){a[i]=a[i-1]+a[i-2];if(a[i]>200000) break;fac[a[i]]=true;}fac[1]=true;int n;cin>>n;for(int i=0;i<n-1;i++){int u,v;cin>>u>>v;add(u,v);add(v,u);}if(!fac[n]){cout<<"No"<<endl;return 0;}sol(1,n);cout<<"Yes"<<endl;}

Codeforces Global Round 13 E. Fib-tree相关推荐

  1. Codeforces Global Round 13 C

    C. Pekora and Trampoline 题意:对于数组a,每次出发开始可以选择任意元素作为起始点,然后在数组上移动,落点为i + a[i],直至超出数组范围,每次经过的点的值减一(先移动再减 ...

  2. Codeforces Global Round 13 A-E题解

    A 01序列,一个操作对某一位取反,一个操作问你当前第k大是多少 维护一个当前最后一个1所在排名 #include <cstdio> using namespace std; const ...

  3. Codeforces Global Round 1 晕阙记

    Codeforces Global Round 1 晕阙记 我做这场比赛的时候晕得要死.做这三道题做太久了,rating涨不起来啊! A 如果愿意的话你可以看做是膜2意义下的运算,写快速幂等各种膜运算 ...

  4. Codeforces Global Round 3

    Codeforces Global Round 3 A. Another One Bites The Dust 有若干个a,有若干个b,有若干个ab.你现在要把这些串拼成一个串,使得任意两个相邻的位置 ...

  5. Codeforces Global Round 14 F. Phoenix and Earthquake 思维 + 并查集

    传送门 文章目录 题意: 思路: 题意: 给你nnn个点,mmm条边,限制xxx,每个点都有沥青aia_iai​,定义合并两个点即两点之间有边且au+av≥xa_u+a_v\ge xau​+av​≥x ...

  6. Codeforces Global Round 1

    Codeforces Global Round 1 题解:The Editorial of the First Codeforces Global Round A:其实mod 2计算一下就行了 B:删 ...

  7. 【Codeforces Global Round 23】B. Rebellion

    Codeforces Global Round 23中B. Rebellion Codeforces比赛记录 文章目录 题目链接: 一.B. Rebellion 题目意思: 上思路: 总结 B. Re ...

  8. Codeforces Global Round 4-D. Prime Graph(伯特兰-切比雪夫定理)

    题目:Codeforces Global Round 4-D. Prime Graph 题意:给出n(顶点的个数),要求所得图满足: 1.无平行边和自环 2.边的总数是个质数 3.每个点的度(也就是点 ...

  9. codeforces global round 23

    constest :codeforces global round 23 contest time:2022.10.16 contest grade: 2800 contest rating chan ...

最新文章

  1. mysql 30天销量_mysql查询今天,昨天,近7天,近30天,本月,上一月数据方法
  2. 自己手写HashMap——红黑树的Java实现
  3. MIT开发AI新工具,替设计师“省材料钱”:支持实时预览、兼容CAD软件丨开源...
  4. 3.11 总结-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  5. mysql 5.7.11 my.ini,mysql5.7以上版本配置my.ini的详细步骤
  6. oracle高级复制管理里面,配置高级复制问题,请大家指点!
  7. html 简单 在线编辑器 ie ff,一款垃圾中的极品HTML编辑器(兼容IE OR FF)
  8. netbeans连接数据库_NetBeans Java EE技巧3:数据库中的RESTful Web服务
  9. ValueError: Program dot not found in path.python下运行pygraphviz出现报错
  10. Python中lambda的使用,与它的三个好基友介绍!
  11. python安装 pip_多版本Python安装pip及pip版本管理终极教程
  12. Kotlin入门(25)共享参数模板
  13. 脾虚怎么办?7招驯服“脾”气-转
  14. 1.7 Linux文件目录查看与编写内容
  15. 固态硬盘简称是不是ssd_小白科普:没想到你是这样的固态硬盘
  16. 7- 代码段权限检查与 jmp
  17. 10个容易被接受的辞职理由
  18. java自行车s码适合身高_选购单车时,身高和尺寸对应表
  19. linux系统及编程基础唐晓君,Linux-Shell编程之判断文件类型
  20. OneZero第三周第一次站立会议(2016.4.4)

热门文章

  1. 深度学习在三维环境重建中的应用
  2. iOS:CALayer核心动画层
  3. /dev/urandom
  4. 压缩工具gzip,bzip2,xz,zip,tar
  5. Microsoft Remote Desktop移动客户端QA
  6. Silverlight网站服务器端的配置
  7. Mysql:命令选项、配置选项、(全局、会话)系统变量、状态变量:命令选项...
  8. linux统计文件的个数
  9. java 1000个线程_java,一个程序建立1000个线程,每一个线程加1到一个变量sum。
  10. linux运行dock打包的镜像,Linux部署之Docker方式部署项目