最小生成樹

2021-10-19 09:47:55 字數 540 閱讀 8224

kruskal的優化:

以highways 這題為例

思路,點之間兩兩建邊,利用kruskal和並查集,先連上已有的邊(將邊的兩個端點放入乙個並查集中),再將不同集合的邊連線直到邊數等於n

做題過程1:結構體2個(point記錄點座標,edge記錄每條邊的情況),優先佇列(至今為止kruskal用的好像都是這個?,每兩個點之間建邊,但是跳過在同意集合的兩個點。其中建邊的時間複雜度是o(n^2),kruskalo(nlogn),怎麼看都不會超時的情況下,還是因為常數過大tle了(黃色部分仍可優化)

每兩個點之間建邊for(int i = 1->n),for(int j = 1-> n)->for(int i = 1->n),for(int j = i + 1 ->n),雖然是無向圖,但可只建立單向邊縮短常數時間(538ms)

優先佇列->sort:優先佇列每進行一次pop()操作都要logn的時間,而sort總共只需一次logn的時間(538ms->254ms)

總結:1:保證答案正確的情況下,盡量建更少的邊

2:用sort代替priority_queue

最小生成樹 次小生成樹

一 最小生成樹 說到生成樹首先要解釋一下樹,樹是乙個聯通的無向無環圖,多棵樹的集合則被稱為森林。因此,樹具有許多性質 1.兩點之間的路徑是唯一的。2.邊數等於點數減一。3.連線任意兩點都會生成乙個環。對於乙個無向聯通圖g的子圖,如果它包含g的所有點,則它被稱為g的生成樹,而各邊權和最小的生成樹則被稱...

最小生成樹

package 圖 最小生成樹是用最少的邊吧把所有的節點連線起來。於是和圖的深度優先搜素差不多。class stack public void push int key public int pop 檢視棧頂的元素 public int peek public boolean isempty cla...

最小生成樹

define max vertex num 20 最大頂點數 typedef int adjmatrix max vertex num max vertex num 鄰接矩陣型別 typedef char vertextype typedef struct mgraph struct dnodecl...