代码
#include<iostream>
#include<cstdio>
int n,m,to[100001],nxt[100001],head[100001],e,hed,tail,dis[100001],stack[100001];
int cost[100001],x,y;
bool in[100001];
using namespace std;
inline void add(int f,int t)
{
e++;
to[e]=t;
nxt[e]=head[f];
cost[e]=1;
head[f]=e;
}
void spfa(int x)
{
while(hed<=tail)
{
int pc=head[stack[hed]];
in[stack[hed]]=0;
hed++;
for(int i=pc;i;i=nxt[i])
{
int t=to[i];
if(dis[t]>=dis[stack[hed-1]]+1)
{
dis[t]=dis[stack[hed-1]]+1;
if(!in[t])
{
tail++;
stack[tail]=t;
in[t]=1;
}
}
}
}
}
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++)
{
dis[i]=2e9;
}
hed=1;
stack[1]=1;
tail=1;
in[1]=1;
dis[1]=0;
spfa(1);
int ans=0,sum=0,pc;
for(int i=1;i<=n;i++)
{
if(dis[i]>ans)
{
ans=dis[i];
}
}
for(int i=1;i<=n;i++)
{
if(dis[i]==ans)
{
pc=i;
break;
}
}
for(int i=1;i<=n;i++)
{
if(dis[i]==ans)
{
sum++;
}
}
printf("%d %d %d",pc,ans,sum);
}