获得徽章 0
- 打卡一个acwing铁路与公路的题解吧
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 410,INF = 0x3f3f3f3f;
int n,m;
int f[N][N],g[N][N];
int floyd(int d[][N])
{
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
d[i][j] = min(d[i][j],d[i][k]+d[k][j]);
return d[1][n];
}
int main()
{
scanf("%d%d",&n,&m);
memset(f,0x3f,sizeof f);
memset(g,0x3f,sizeof g);
while(m--)
{
int a,b;
scanf("%d%d",&a,&b);
f[a][b] = f[b][a] =1;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i != j && f[i][j]!=1)
g[i][j] =1;
int res = max(floyd(f),floyd(g));
if(res == INF) res = -1;
printf("%d\n",res);
return 0;
}展开评论点赞
![[流泪]](http://lf-web-assets.juejin.cn/obj/juejin-web/xitu_juejin_web/img/jj_emoji_6.dde0d83.png)