cf1067b
题意简述:判断所给图是不是一个k递归图

这是一个2递归图
题解:仔细观察发现中心点一定是直径的中点,因此找到直径中点之后进行bfs判断即可,这里注意判断递归层次太大也不符合
const int maxn=1e5+5;
const int maxm=2e5+5;
const int inf=1e9;
int head[maxn],ver[maxm],nex[maxm],tot;
void inline AddEdge(int x,int y){
ver[++tot]=y,nex[tot]=head[x],head[x]=tot;
}
int n,k;
int d[maxn],dep[maxn],pre[maxn];
bool vis[maxn];
int main(){
cin>>n>>k;
for(int i=0;i<n-1;i++){
int x,y;
scanf("%d%d",&x,&y);
AddEdge(x,y);
AddEdge(y,x);
d[x]++;
d[y]++;
}
int lf=0;
for(int i=1;i<=n;i++)
if(d[i]==1) {
lf=i;break;
}
if(!lf) {
puts("No");return 0;
}
queue<int> q;
q.push(lf);
int rf=0;
while(q.size()){
int x=q.front();q.pop();
vis[x]=1;
for(int i=head[x];i;i=nex[i]){
int y=ver[i];
if(!vis[y]) {
dep[y]=dep[x]+1;
pre[y]=x;
q.push(y);
}
}
}
for(int i=1;i<=n;i++){
if(dep[i]==2*k) {
rf=i;break;
}
}
if(!rf) {
puts("No");return 0;
}
int rt;
for(int i=0;i<k;i++){
rf=pre[rf];
}
rt=rf;
memset(vis,0,sizeof(vis));
memset(dep,0,sizeof(dep));
q.push(rt);
while(q.size()){
int x=q.front();q.pop();
int sum=0;
vis[x]=1;
for(int i=head[x];i;i=nex[i]){
int y=ver[i];
if(!vis[y]){
dep[y]=dep[x]+1;
pre[y]=x;
q.push(y);
sum++;
}
}
if(dep[x]<k && sum<3) {
puts("No");return 0;
}
if(dep[x]>k) {//巨坑
puts("No");
return 0;
}
}
puts("Yes");
}
cf1067b的更多相关文章
- 模拟求root——cf1067B
注意最后一轮要单独求一下 且最后只能有一个root #include <bits/stdc++.h> using namespace std; #define MOD 1000000007 ...
随机推荐
- pico g2 触摸板手柄射线检测---for unity
1.pico g2手柄射线检测UI,需要在canvas添加Graphic Raycaster脚本和Pvr_Ui Canvas脚本. 2.删除掉原有的maincamera,将Pvr_unitySDK下h ...
- web语义化这个坑
什么是wen语义化:https://www.zhihu.com/question/20455165 标签大全:http://www.w3school.com.cn/tags/tag_html.asp ...
- 死磕dtd(1)
看到安卓开发里大量的xml文件和layout里的Android UI开始复习一下xml xml的校验规则依据dtd dtd里面大小写敏感.....查找了好久才发现这个问题 <?xml versi ...
- 2019牛客多校2 F Partition problem(dfs)
题意: n<=28个人,分成人数相同的两组,给你2*n*2*n的矩阵,如果(i,j)在不同的组里,竞争力增加v[i][j],问你怎么分配竞争力最 4s 思路: 枚举C(28,14)的状态,更新答 ...
- python学习(1)python的基本概念
1.python是世界上最流行的程序语言之一,用途广泛. 2.python是解释型语言,与C++编译类语言相比,python扩展性强,简单易上手.但是缺点也很明显,执行速度慢. 3.python定义中 ...
- shell脚本自动化部署
由于公司技术部团队较小,没有专门的运维团队,所以运维工作技术部承包了. 一.纯人工部署是这样的: 1. 本地打包:一般 maven clean package 2. 借助xftp上传到服务器对应目录 ...
- [redis读书笔记] 第一部分 数据结构与对象 简单动态字符串
本读书笔记主要来自于<<redis设计与实现>> -- 黄键宏(huangz) redis主要设计了字符串,链表,字典,跳跃表,整数集合,压缩列表来做为基本的数据结构,实现键值 ...
- [Effective Java 读书笔记] 第6章 枚举和注解
第三十条 用enum代替int 总得来说,使用enum有几点好处 1.编译时的类型安全, 2.可以保证就是自己定义的值,不会有月结风险, 3.每个枚举类型有自己的命名空间 4.枚举可以添加任意的方法和 ...
- php连接mySql数据库 示例
<?php header("content-type:text/html;charset=utf-8"); error_reporting(E_ALL); /* 连接数据库- ...
- Java逃逸分析
Java逃逸分析 记录下看到的别人的博客内容,以后深入了解再详细写篇,加深下基础概念和印象! 一般来说,Java对象的创建,通常是在堆空间中分配内存,但是如果大量的临时对象也在堆空间创建的话,会导致性 ...