bzoj3402

题解:

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); 
}
原文地址:https://www.cnblogs.com/xuanyiming/p/8214603.html