牛客小白月赛119 D
BFS,一开始把所有叶子存入队列,每次向内延伸。对于每个节点记录下延伸的轮数(它等于最近叶子节点的距离)
最终找出记录值最远的一些点即可。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
vector<int> e[N];
int d[N],deg[N],vst[N];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int T; cin>>T;
while(T--)
{
int n; cin>>n;
for(int i=1;i<=n;i++)
{
e[i].clear();
d[i]=0; deg[i]=0; vst[i]=0;
}
for(int i=1,u,w;i<n;i++)
{
cin>>u>>w;
e[u].push_back(w);
e[w].push_back(u);
deg[u]++; deg[w]++;
}
queue<int> q;
for(int i=1;i<=n;i++)
if(deg[i]==1)
q.push(i), vst[i]=1;
while(!q.empty())
{
int x=q.front(); q.pop();
for(auto y:e[x])
{
if(vst[y]) continue;
d[y]=d[x]+1;
vst[y]=1;
q.push(y);
}
}
int mx=0;
for(int i=1;i<=n;i++)
if(deg[i]>1)
mx=max(mx,d[i]);
vector<int> ans;
for(int i=1;i<=n;i++)
if(deg[i]>1 && d[i]==mx)
ans.push_back(i);
cout<<ans.size()<<'\n';
for(auto x:ans) cout<<x<<' ';
cout<<'\n';
}
}
#牛客创作赏金赛#
最终找出记录值最远的一些点即可。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
vector<int> e[N];
int d[N],deg[N],vst[N];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int T; cin>>T;
while(T--)
{
int n; cin>>n;
for(int i=1;i<=n;i++)
{
e[i].clear();
d[i]=0; deg[i]=0; vst[i]=0;
}
for(int i=1,u,w;i<n;i++)
{
cin>>u>>w;
e[u].push_back(w);
e[w].push_back(u);
deg[u]++; deg[w]++;
}
queue<int> q;
for(int i=1;i<=n;i++)
if(deg[i]==1)
q.push(i), vst[i]=1;
while(!q.empty())
{
int x=q.front(); q.pop();
for(auto y:e[x])
{
if(vst[y]) continue;
d[y]=d[x]+1;
vst[y]=1;
q.push(y);
}
}
int mx=0;
for(int i=1;i<=n;i++)
if(deg[i]>1)
mx=max(mx,d[i]);
vector<int> ans;
for(int i=1;i<=n;i++)
if(deg[i]>1 && d[i]==mx)
ans.push_back(i);
cout<<ans.size()<<'\n';
for(auto x:ans) cout<<x<<' ';
cout<<'\n';
}
}
#牛客创作赏金赛#
全部评论
接好运
忍耐王
相关推荐
昨天 00:55
门头沟学院 牛客53210502...:简历一页:把区域银,邀请赛金标粗,其他的奖除非凑一页否则没有必要写。或者多页:每个站一行这样都列出来。项目经历看看牛客其他人是怎么写的,写的不好呢。简历打磨好按部就班没问题的
点赞 评论 收藏
分享
苦也:佬投的是日常实习吗,是在官网投的吗,我也想找段实习沉淀一下,投了根本没消息
点赞 评论 收藏
分享

360集团公司氛围 407人发布