做完這道題可以更加理解 \(floyed\) 的本質。
我們考慮 \(floyed\) 的過程,是不斷的列舉乙個中轉點 \(k\),通過這個中轉點來更新其他點的答案。
當我可以用乙個點 \(k\) 更新 \(i\),\(j\) 答案的時候,代表的實際意義是什麼呢?就是 \(i\) 和 \(j\) 與 \(k\) 點是聯通的。
我們可以發現這和題面上按照時間新增聯通的點是對應的!
於是我們便能有這樣的做法:按照時間依次將可更新的點用於更新,然後輸出聯通情況即可。
**:
// 妙題
// 考慮 floyd 的過程:用乙個中轉點 k 更新所有的節點的距離
// 這個中轉點,一般是直接列舉的,考慮其意義,能作為中轉點的點,就是與當前位置聯通的點
// 恰好和題中的道路建成對應
// 於是這題可以用 floyed 做
# include # include # include # define maxn 205
int dis[maxn][maxn], n;
int vi[maxn];
void floyed(int k)
} }}int main()
for(int i = 1, u, v, w; i <= m; i++)
int curvil = 0;
scanf("%d", &q);
while(q--)
if(dis[x][y] == 0x3f3f3f3f || vi[x] > t || vi[y] > t)
else
} return 0;
}
災後重建 洛谷1119 最短路
b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度,公路是雙向的。並給...
洛谷P1119 災後重建(最短路)
b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度,公路是雙向的。並給...
洛谷P1119 災後重建(最短路)
b地區在 過後,所有村莊都造成了一定的損毀,而這場 卻沒對公路造成什麼影響。但是在村莊重建好之前,所有與未重建完成的村莊的公路均無法通車。換句話說,只有連線著兩個重建完成的村莊的公路才能通車,只能到達重建完成的村莊。給出b地區的村莊數n,村莊編號從0到n 1,和所有m條公路的長度,公路是雙向的。並給...