bzoj3402

时间:2021-08-31 20:47:26

题解:

spfa最短路

然后枚举判断奇数

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+;
int n,m,x,y,ne[N],num,fi[N],zz[N],dis[N],f[N],b[N*];
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[]=;
f[]=;
b[]=;
int l=,r=;
while (l<r)
{
int now=b[l++];
f[now]=;
for (int i=fi[now];i;i=ne[i])
{
int t=zz[i];
if (dis[t]>dis[now]+)
{
dis[t]=dis[now]+;
if (!f[t])
{
f[t]=;
b[r++]=t;
}
}
}
}
int p=,ans=;
for (int i=;i<=n;i++)
{
if (dis[i]>dis[p])p=i,ans=;
if (dis[i]==dis[p])ans++;
}
printf("%d %d %d",p,dis[p],ans);
}

相关文章