洛谷P3905 道路重建

2022-04-06 03:25:59 字數 798 閱讀 4051

此題是顯然的最短路演算法,只是看到一起刪掉的一堆邊感到十分棘手,而且還要求出的是最短新增邊的總長度

但如果仔細觀察就可以發現,我們其實並不用乙個乙個的全部列舉,只需要把新增的邊做最短路就行了。

我們可以首先把陣列初始化為乙個較大的數,然後每讀入一條邊,就把此邊的權值記錄,但還要把它清零。

為什麼呢?

因為我們清零相當於不考慮此邊的權值,但又可以經過這條邊,有效的能保留下刪去的邊,來僅僅考慮被刪邊的最短路。

然後讀入刪掉的邊,這時候我們把那些刪去的邊賦上原來的權值,進行計算即可。

what?這不就是最短路模板嗎?

注意到資料範圍,n≤

100n≤1

00?不就是floyd常見的資料範圍嗎?

於是floyd都往上套了。。。

於是此題經過轉換,就成為了乙個可用floyd,dijkstra,spfa等多種最短路演算法解決的板子題了。。。

下面給出floyd**:

#include#include#includeusing namespace std;

int f[105][105],g[105][105];

int main()

int d;

scanf("%d",&d);

for(int i=1;i<=d;i++)

for(int k=1;k<=n;k++)

}} int x,y;

scanf("%d%d",&x,&y);

printf("%d",f[x][y]);

return 0;

}

洛谷P3905 道路重建

此題是顯然的最短路演算法,只是看到一起刪掉的一堆邊感到十分棘手,而且還要求出的是最短新增邊的總長度 但如果仔細觀察就可以發現,我們其實並不用乙個乙個的全部列舉,只需要把新增的邊做最短路就行了。我們可以首先把陣列初始化為乙個較大的數,然後每讀入一條邊,就把此邊的權值記錄,但還要把它清零。為什麼呢?因為...

道路重建 洛谷P3905

題目描述 一場可怕的 後,人們用n個牲口棚 1 n 150,編號1 n 重建了農夫john的牧場。由於人們沒有時間建設多餘的道路,所以現在從乙個牲口棚到另乙個牲口棚的道路是惟一的。因此,牧場運輸系統可以被構建成一棵樹。john想要知道另一次 會造成多嚴重的破壞。有些道路一旦被毀壞,就會使一棵含有p ...

P3905 道路重建

p3905 道路重建 我一開始想錯了,我的是類似kruskal,把毀壞的邊從小到大加,並且判斷聯通性。但是這有乙個問題,你可能會多加,就是這條邊沒用,但是它比較小,你也加上了。居然還有10分,資料也是水水的。include include include include include includ...