P1613 跑路 图论*倍增

Posted wangsheng5

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P1613 跑路 图论*倍增相关的知识,希望对你有一定的参考价值。

如题,非常巧妙的一道图论*倍增,n <= 50 所以可以用高复杂度的Floyd搞。

技术图片
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 
 5 using namespace std;
 6 
 7 int ans = (1<<31)-1;
 8 int n,m;
 9 int g[36][60][60];
10 int ng[60][60];
11 
12 int main(){
13     ios::sync_with_stdio(false);
14     memset(ng,0x3f,sizeof(ng));
15     cin >> n >> m;
16     for(int i = 1;i <= m;i++){
17         int x,y;
18         cin >> x >> y;
19         g[0][x][y] = 1;
20     }
21     for(int k = 1;k < 36;k++)
22         for(int i = 1;i <= n;i++)
23             for(int j = 1;j <= n;j++)
24                 for(int t = 1;t <= n;t++)
25                     g[k][i][j] |= g[k-1][i][t]&g[k-1][t][j];
26     
27     for(int k = 0;k < 36;k++)
28         for(int i = 1;i <= n;i++)
29             for(int j = 1;j <= n;j++)
30                 if(g[k][i][j])ng[i][j] = 1;
31     
32     for(int k = 1;k <= n;k++)
33         for(int i = 1;i <= n;i++)
34             for(int j = 1;j <= n;j++)
35                 if(ng[i][j] > ng[i][k]+ng[k][j])
36                     ng[i][j] = ng[i][k] + ng[k][j];
37     
38     cout << ng[1][n];
39 return 0;
40 }
P1613 跑路

 

以上是关于P1613 跑路 图论*倍增的主要内容,如果未能解决你的问题,请参考以下文章

题解Luogu P1613 跑路 倍增+最短路

#(倍增算法)P1613 跑路(提高+/省选-)

luogu P1613 跑路

[Luogu P1613]跑路 (DP+倍增+最短路)

P1613 跑路

Luogu P1613 跑路 题解报告