P1613 跑路

 1 #include<iostream>
 2 #include<string>
 3 #include<queue>
 4 #include<stack>
 5 #include<vector>
 6 #include<map>
 7 #include<cstdio>
 8 #include<cstdlib>
 9 #include<algorithm>
10 #include<set>
11 #include<iomanip>
12 #include<cstring>
13 #include<cmath>
14 #include<limits>
15 using namespace std;
16 
17 #define au auto
18 #define debug(i) cout<<"debug: "<<i<<endl
19 #define mfor(i,a,b) for(register int i=(a);i<=(b);i++)
20 #define mrep(i,a,b) for(register int i=(a);i>=(b);i--)
21 #define LLL __int128
22 #define Re register
23 #define il inline
24 #define mem(a,b) memset(a,(b),sizeof(a))
25 typedef pair<int, int> intpair;
26 typedef long long int LL;
27 const int INF = 0x3f3f3f3f;
28 const long long int INFLL = 0x3f3f3f3f3f3f3f3f;
29 
30 const int maxn = 51;
31 int dis[maxn][maxn];
32 bool h[maxn][maxn][50];
33 int n, m;
34 
35 int main()
36 {
37     cin >> n >> m;
38     mem(dis, 0x3f);
39     mfor(i, 1, m)
40     {
41         int a, b;
42         cin >> a >> b;
43         dis[a][b] = 1;
44         h[a][b][0] = true;
45     }
46     mfor(k, 1, 50)
47     {
48         mfor(i, 1, n)
49         {
50             mfor(j, 1, n)
51             {
52                 mfor(l, 1, n)
53                 {
54                     if (h[i][j][k - 1] && h[j][l][k - 1])
55                     {
56                         h[i][l][k] = true;
57                         dis[i][l] = 1;
58                     }
59                 }
60             }
61         }
62     }
63     mfor(k, 1, 50)
64     {
65         mfor(i, 1, n)
66         {
67             mfor(j, 1, n)
68             {
69                 dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
70             }
71         }
72     }
73     cout << dis[1][n];
74 }
View Code

 

posted on 2019-10-20 21:06  thjkhdf12  阅读(91)  评论(0)    收藏  举报