簡體   English   中英

網格圖論

[英]Grid Graph Theory

我在幾個小時內嘗試了以下問題,但無法獲得正確的邏輯。

您是一個規划團隊,負責布置輔助電網。 該輔助電網的目的是在停電的情況下為小鎮的交叉點上的燈柱供電。 你的團隊有k個發電機。 您可以將這些發生器放置在網格中的任何位置,並且每個發生器可以打開通過網格與其連接的所有燈(存在路徑)。 對於城鎮中的每條道路,您將獲得在網格中鋪設電纜以連接該道路端點處的兩個交叉點的成本。 鑒於城鎮的布局,你的任務是放下最低成本網格,並在其上安裝發電機,這樣你就可以打開城鎮交界處的所有燈柱。

輸入:第一行包含案例數t。 然后,t案件隨之而來。 每種情況的第一行包含三個整數n,m和k。 結點編號為1到n。 然后,m行跟隨。 每行包含三個整數i,j,c。 整數i和j在1和n之間,表示道路兩個端點處的兩個交點。 第三個整數c是在這條道路上鋪設電纜的成本。

輸出:您應該輸出t行,每種情況一個。 對於每種情況輸出最小成本網格。 如果這項任務不可能(即沒有辦法用k發電機打開所有燈),輸出“不可能!” (為清晰起見)

Constraints:
1 <= t <= 25
1 <= n <= 2000
0 <= m <= n(n-1)/2
0 <= c <= 1000000

Sample Input:
2
3 1 1
1 2 10
6 7 2
1 2 20
1 3 5
1 4 10
2 3 8
2 4 15
3 4 2
5 6 9

Sample Output:
Impossible!
24

說明:在第一種情況下,連接點1和2與連接點3斷開連接,並且只能使用一個發生器打開所有燈柱。 您需要至少兩台發電機。在第二種情況下,您可以在道路上放置電纜(1 3),(2 3),(3 4)和(5 6),然后在1號交叉口和1號處安裝一台發電機5號交叉口的發電機。

如何有效地解決這個問題?現在我不知道除了BruteForce之外。 修改后的Kruskal會在這里工作嗎?

您需要的解決方案是一組斷開連接的生成樹。 如果您沒有在解決方案中使用所有行並給它們相同的非常大的成本,那么您可以找到最小生成樹並丟棄具有非常高成本的行以找到解決方案。

這顯然是不可能的,但Kruskal的算法以最低成本的邊緣開始並且以穩定增加的成本的順序進行。 因此,如果您在斷開組件時停止它,您將獲得與完成此操作相同的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM