题解:
spfa最短路
然后枚举判断奇数
代码:
#include<bits/stdc++.h> using namespace std; const int N=2e5+5; int n,m,x,y,ne[N],num,fi[N],zz[N],dis[N],f[N],b[N*100]; void jb(int x,int y) { ne[++num]=fi[x]; fi[x]=num; zz[num]=y; } int main() { scanf("%d%d",&n,&m); while (m--) { scanf("%d%d",&x,&y); jb(x,y);jb(y,x); } memset(dis,0x3f,sizeof dis); dis[1]=0; f[1]=1; b[0]=1; int l=0,r=1; while (l<r) { int now=b[l++]; f[now]=0; for (int i=fi[now];i;i=ne[i]) { int t=zz[i]; if (dis[t]>dis[now]+1) { dis[t]=dis[now]+1; if (!f[t]) { f[t]=1; b[r++]=t; } } } } int p=1,ans=1; for (int i=2;i<=n;i++) { if (dis[i]>dis[p])p=i,ans=0; if (dis[i]==dis[p])ans++; } printf("%d %d %d",p,dis[p],ans); }