题意简述:判断所给图是不是一个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的更多相关文章

  1. 模拟求root——cf1067B

    注意最后一轮要单独求一下 且最后只能有一个root #include <bits/stdc++.h> using namespace std; #define MOD 1000000007 ...

随机推荐

  1. SSH(一)

    系统程序架构:    整合思路        1.逆依赖方向而行,由Spring提供对象管理和服务        2.依次实现Spring与Hibernate.Spring与Struts2的集成 配置 ...

  2. pyhton3之进程

    一 什么是进程 首先要了解什么是进程,程序是写出来没有被执行的代码,它是没有生命的实体,只有处理器赋予程序生命时,及程序被操作系统运行起来,他是一个活动的实体,我们称其为进程. 进程是计算机中的程序关 ...

  3. RC振荡电路

    RC振荡电路,由电阻R和电容C构成的适用于产生低频信号的电路 1.原理---简介 RC振荡电路,采用RC选频网络构成,适用于低频振荡,一般用于产生1Hz~1MHz(fo=1/2πRC)的低频信号.对于 ...

  4. RestTemplate工具类根据服务名发送请求

    要使用RestTemplate 根据服务名发送请求的话需要 使用  @LoadBalanced  这个注解,用了这个注解的RestTemplate就不用使用  ip 来请求了,首先要创建一个配置类 i ...

  5. 使用PyCharm创建并运行一个Python项目

    (1)首先,在欢迎界面点击“Create New Project”: (2)在“New Project“左侧面板点击”Pure Python“,右侧Location选择自己要创建项目的路径(一般情况, ...

  6. PHP反序列化中过滤函数使用不当导致的对象注入

    1.漏洞产生的原因 ####  正常的反序列化语句是这样的 $a='a:2:{s:8:"username";s:7:"dimpl3s";s:8:"pa ...

  7. CCF_201604-1_折点计数

    (a[i]-a[i-1])*(a[i]-a[i+1]) > 0 的点符合条件 #include<cstdio> #include<iostream> using name ...

  8. js变量和函数提升

    写在前面: 变量提升是 声明提升,初始化不会提升,比如说 var a=1; console.log(a); 实际是这样执行(个人理解,仅供参考) var a; console.log(a); a=1; ...

  9. ARTS Week 6

    Dec 2, 2019 ~ Dec 8, 2019 Algorithm 从本周开始,由于要涉及某一算法,但我又有选择困难症.所以我决定在Leetcode刷题的,用ARTS中的算法部分来记录本周值得记录 ...

  10. lua学习之函数篇

    函数 函数是对语句和表达式进行抽象的主要机制 两种用法 一是可以完成特定的任务,一句函数调用被视为一条语句 二是以只用来计算并返回特定的结果,视为一句表达式 print("Hello, Wo ...