解题思路
题目比较水,floyd求出最短路取个最小值即可。结果joyoi时限写错了。。好像只有0ms才能过??突然发现加了快读就T不加就A,数据在10000以下的还是scanf快啊。
代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN = 105;
const int inf = 0x3f3f3f3f;
int n,m;
int dis[MAXN][MAXN];
int ans;
int min(int x,int y){
if(x>y) return y;
return x;
}
inline void floyd(){
for(register int k=1;k<=n;k++)
for(register int i=1;i<=n;i++)
for(register int j=1;j<=n;j++)
if(i!=j && j!=k && i!=k)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
int main(){
memset(dis,0x3f,sizeof(dis));
scanf("%d%d",&n,&m);
for(register int i=1;i<=m;i++){
int x,y;
scanf("%d%d",&x,&y);
dis[x][y]=dis[y][x]=1;
}
floyd();
for(register int i=1;i<=n;i++)
for(register int j=1;j<i;j++)
if(dis[i][j]>ans)
ans=dis[i][j];
printf("%d\n",ans);
return 0;
}