1 条题解
-
1
#include<bits/stdc++.h> using namespace std; const int maxn=60; int n,m,t; int dis[maxn][maxn]; bool f[maxn][maxn][70]; void init(){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)dis[i][j]=100; for(int i=1;i<=n;i++) dis[i][i]=0; } void pre(){ for(int cnt=1;cnt<=64;cnt++) for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(f[i][k][cnt-1]&&f[k][j][cnt-1])f[i][j][cnt]=1,dis[i][j]=1; } int main(){ scanf("%d%d",&n,&m); init(); for(int i=1;i<=m;i++){ int u,v;scanf("%d%d",&u,&v); f[u][v][0]=1,dis[u][v]=1; } pre(); for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++)dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]); printf("%d",dis[1][n]); return 0; }
- 1
信息
- ID
- 41
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- (无)
- 递交数
- 5
- 已通过
- 5
- 上传者