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 ...
随机推荐
- hdu 1159求最长公共子序列
题目描述:给出两个字符串,求两个字符串的公共子序列(不是公共子串,不要求连续,但要符合在原字符串中的顺序) in: abcfbc abfcab programming contest abcd mnp ...
- NetworkX包
官方教程 NetworkX是一个创建,操作,研究复杂网络的结构,动态,功能的python包. #创建一个network import networkx as nx G = nx.Graph() #no ...
- 机器学习总结-bias–variance tradeoff
bias–variance tradeoff 通过机器学习,我们可以从历史数据学到一个\(f\),使得对新的数据\(x\),可以利用学到的\(f\)得到输出值\(f(x)\).设我们不知道的真实的\( ...
- HDU_2167_状态压缩dp
http://acm.hdu.edu.cn/showproblem.php?pid=2167 第一道状态压缩dp,其实就是爆搜,只不过把排除了大量不可能的情况,先用sta保存每行可能的情况,sum[i ...
- SpringBoot项目版本升级:从1.5.3升级到2.1.8版本
SpringBoot项目版本升级:从1.5.3升级到2.1.8版本 前言 简单记录一次本人在自己的SpringBoot项目project-template中,把1.5.3版本升级到2.1.8版本时升级 ...
- lua学习之表达式篇
表达式 表达式用于表达值 lua 中表达式可以为数字常量,自变字符串,变量,一元和二元操作符,函数调用.函数定义.table 构造式 算数操作符 一元操作符 -负号 二元操作符 -减号 / ^ % x ...
- Golang定时任务简单实现
下载cron包: go get github.com/robfig/cron 开启一个定时: 根据cron表达式进行时间调度,cron可以精确到秒,大部分表达式格式也是从秒开始. c := cron. ...
- 2020-02-20Linux学习日记,第二天
在内容开始前请教一下博客园的大佬.编辑器中没有看到格式刷,要怎么不连续的选中内容给予想要的格式,有看到的麻烦私信解答一下,谢谢! ----------------------------------- ...
- python学习(3)关于交互输入及字符串拼接
input是输入语句,用于人机交互. input() 函数接受一个标准输入数据,返回为 string 类型.如果需要输入的未数字,则需要额外定义. sex=input(“Sex:”) #这里会默认为S ...
- 从linux命令行分享文件:bashupload.com和transfer.sh
背景 传输文件是一个常见的需求,简单的做法是通过即时通讯工具,邮件,网盘完成. 但当分享或接收的一端为远程服务器,只有命令行可以操作时,一个能支持在命令行完成分享和下载的工具,就会省下不少麻烦. 下面 ...