最小生成樹演算法 大魚海棠

2021-08-29 02:07:46 字數 1786 閱讀 9309

時間限制: 1 sec  記憶體限制: 128 mb

提交: 29  解決: 12

[提交][狀態][討論版]

近期熱映的電影《大魚海棠》靈感**於《

莊子·逍遙遊》,講述了乙個掌管海棠花的少女與人類男孩「鯤」的靈魂的奇幻故事。

所有人類的靈魂都是海浬一條巨大的魚,出生的時候從海的此岸出發,在路途中,有時相遇,有時分開,死的時候去到海的彼岸,之後變成一條沉睡的小魚,等待多年後的再次出發,這個旅程永遠不會結束,生命往復不息。十六歲生日那天,居住在「神之圍樓」裡的乙個名叫椿的女孩變作一條海豚到人間巡禮,被大海中的一張網困住,乙個人類男孩因為救她而落入深海死去。為了報恩,為了讓人類男孩復活,她需要在自己的世界裡,歷經種種困難與阻礙,幫助死後男孩的靈魂——一條拇指那麼大的小魚,成長為一條比鯨更巨大的魚並回歸大海。

然後……我去看了這部電影……電影中主要人物有三個——椿,鯤,湫。在椿生活的世界裡,鯤是一條魚。

這個世界中有n個城市。編號1至n。椿,鯤,湫居住在城市1。

鯤在這個世界裡行走,是需要通過「水道」的!而在椿的世界裡,平時並不會出現「水道」。

某一天,鯤長大了,即將回到人類世界!椿想和鯤最後一次一起在自己的世界裡遊歷所有的城市。因此,椿向湫尋求幫助,湫施展了魔法,變出了m條水道供椿選擇:每條水道連線了兩個城市u,v,以及椿建造這條水道需要消耗的法力值w。

椿可以選擇其中的n-1條水道進行建造,但要保證能遊歷所有的城市,請問椿最少需要消耗多少法力值?

如果椿無論怎麼建造水道都無法保證和鯤遊歷完所有的城市,請輸出-1。

多組測試資料。

每組測試資料,第一行輸入n,m。

n表示有n個城市,m表示椿可以在這m條水道中進行選擇。(資料中 n最大為100,m最大為10000)

接下來m行,每行輸入三個數u,v,w。表示可以在城市u和城市v之間建立一條水道,建造該便水道消耗的法力值為w。(w最大為200.)

資料中,兩個城市之間可能多條有費用不一樣的水道可供選擇。

如果無論椿怎麼建造水道都不能和鯤遊歷完所有的城市,請輸出-1。

否則,請輸出椿建造水道的需要消耗的最少法力值。

2 1

1 2 3

3 11 2 3

3

-1

#include #include 

#include

#include

#include

using

namespace

std;

int pre[105

];struct

node

};int find(int x)//

查詢他們的根

intmain()

int k=0

;

int s=0;//

存費用(權)

for(i=1;i<=n-1;i++)//

n個點至少需要n-1條邊來連通

}if(k!=n-1) cout<

/小於n-1代表沒有連通

else cout

}return0;

}

並查集實際上還可以壓縮,這個以後再說,我還沒學。

主要的思路就是,把u,v,w存入優先佇列,優先佇列中w小的在前(優先佇列不懂的話可以看我部落格中優先佇列之一類裡的題,我已分類好了),乙個個取出,如果取出的兩個點已經連通,就取下乙個,否則「並」(讓乙個點的根成為另乙個點的子根)。

最小生成樹演算法

由帶權的連通圖生成的數的各邊加起來稱為生成樹的權,把權值最小的生成樹稱為最小生成樹 minimum spanning tree 簡稱為mst 構造最小生成樹的方法就是利用mst性質,一條一條地選擇可以加入的邊。下面介紹兩種用於構造最小生成樹的演算法,其中第一種演算法稱為prim演算法,第二種演算法稱...

最小生成樹演算法

乙個最簡單的最小生成樹 圖結構練習 最小生成樹 time limit 1000ms memory limit 65536k 有n個城市,其中有些城市之間可以修建公路,修建不同的公路費用是不同的。現在我們想知道,最少花多少錢修公路可以將所有的城市連在一起,使在任意一城市出發,可以到達其他任意的城市。輸...

演算法 最小生成樹

前言 最小生成樹是在乙個給定的無向圖中求一棵樹,這棵樹包含無向圖中的所有頂點,且樹中的邊都來自無向圖中的邊,並且要滿足整棵樹的邊權之和最小。1 最小生成樹是樹,其邊數等於頂點數減1,且不會有環 2 對於給定的圖最小生成樹可以不唯一,但是邊權之和一定是唯一的。3 其根節點可以是這棵樹上的任何乙個節點,...