洛谷P1119 災後重建

2022-03-25 19:14:33 字數 1148 閱讀 6367

這道題是個好題,至少我第一下沒有想到是乙個古老的演算法:$floyd$

第一眼知道是個最短路,然後就很果斷的寫了$dijkstra$,對於每組輸入求一遍最短路,發現時間很困難。又該寫了$spfa$。當時認為$spfa$在新加入村莊時只需將其鬆弛操作即可。

後來發現超時,$80pts$。

事實上在維護新加入的村莊時計算最短路,$floyd$在這方面很出色。$floyd$滿足三角不等式,即$i$到$j$借助新加入的村莊$k$進行維護,而且只需$o(n^2)$

綜上,複雜度為$o(n^3)$。

1 #include 2 #include 3 #include 4 #include 5

6using

namespace

std;78

#define re register

9#define rep(i, a, b) for (re int i = a; i <= b; ++i)

10#define repd(i, a, b) for (re int i = a; i >= b; --i)

11#define maxx(a, b) a = max(a, b);

12#define minn(a, b) a = min(a, b);

13#define ll long long

14#define inf (1 << 30)

1516 inline int

read()

2223

const

int maxn = 200 + 5;24

25int

dis[maxn][maxn], n, m, q, t[maxn];

2627

intmain()

3839 q =read();

4041

int k = 0;42

43 rep(kase, 1

, q)

51if (t[x] > t || t[y] > t || dis[x][y] == 1061109567) printf("

-1\n");

52else printf("

%d\n

", dis[x][y]);53}

5455

return0;

56 }

洛谷 P1119 災後重建

題目背景 b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。題目描述 給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度...

洛谷 P1119 災後重建

題目背景 b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。題目描述 給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度...

洛谷 P1119 災後重建

題目背景 b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。題目描述 給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度...