#include<iostream>
#include<cstdio>
using namespace std;
int n,m,d[200001],x,y,edge,head[500001],maxn,biaohao,sum;
struct node{int to,cost,nxt;}a[500001];
int team[1000001],hed,tail;
bool v[500001];
void add(int x,int y)
{
edge++;
a[edge].to=y;
a[edge].nxt=head[x];
a[edge].cost=1;
head[x]=edge;
}
void spfa(int x)
{
while(hed<=tail)
{
v[team[hed]]=0;hed++;
for(int i=head[team[hed-1]];i;i=a[i].nxt)
{
int t=a[i].to;
if(d[t]>d[team[hed-1]]+1)
{
d[t]=d[team[hed-1]]+1;
if(!v[t])
{
v[t]=1;
team[++tail]=t;
}
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
add(x,y);
add(y,x);
}
for(int i=1;i<=n;i++)
{
d[i]=2e9;
}
d[1]=0;
hed=tail=1;
team[1]=1;
spfa(1);
for(int i=1;i<=n;i++)
{
if(d[i]>maxn)
maxn=d[i];
}
for(int i=1;i<=n;i++)
{
if(d[i]==maxn)
{
biaohao=i;
break;
}
}
for(int i=1;i<=n;i++)
{
if(d[i]==maxn)
{
sum++;
}
}
printf("%d %d %d",biaohao,maxn,sum);
}
SPFA模板
最新推荐文章于 2024-02-08 01:16:35 发布