模板 最小生成樹(kruscal)

2022-06-01 03:21:13 字數 837 閱讀 5335

//洛谷p3366

(其中所應用的並查集原理請見

這裡選用kruscal的方法:先將每乙個點用並查集記錄它們的祖先,用fa[i]來表示

然後將邊按照權重,從小到大排序,這裡選用sort的cmp。

然後,從小到大遍歷邊權,如果遍歷到一條邊的所連的兩個結點不在同一集合,就將這兩個點連上,ans+=g[i].val即可。

等連到n-1條邊時,該圖已經成為一顆樹,即輸出答案

#include#include

#include

#define maxn 200000 + 10

using

namespace

std;

intn,m,ans,num;

intfa[maxn];

struct

edgeg[maxn];

//記錄邊的資訊:起點,終點,權

void

init()

//並查集預處理

bool

cmp(edge a,edge b)

//用於sort的cmp函式

int find(int

x)//

並查集找祖先

bool

merge(edge a)

return

false;}

//並查集連邊

intmain()

//kruscal操作

if(num==n-1) printf("%d"

,ans);

else printf("

orz"

);

return0;

}

Kruscal演算法 最小生成樹

kruscal演算法是加邊。記錄每條路的權值,然後每次都選擇權值最小的邊加入集合,同時選中的每條邊的兩個點也用並查集合並,直到所有的點都被加入了,就是最小生成樹。時間複雜度只和邊有關係,o e loge hihocoder1098 include include include include in...

最小生成樹二 Kruscal演算法(模板題)

描述 隨著小hi擁有城市數目的增加,在之間所使用的prim演算法已經無法繼續使用了 但是幸運的是,經過計算機的分析,小hi已經篩選出了一些比較適合建造道路的路線,這個數量並沒有特別的大。所以問題變成了 小hi現在手上擁有n座城市,且已知其中一些城市間建造道路的費用,小hi希望知道,最少花費多少就可以...

最小生成樹二 Kruscal演算法

還是直接看輸入輸出 輸入每個測試點 輸入檔案 有且僅有一組測試資料。在一組測試資料中 第1行為2個整數n m,表示小hi擁有的城市數量和小hi篩選出路線的條數。接下來的m行,每行描述一條路線,其中第i行為3個整數n1 i,n2 i,v i,分別表示這條路線的兩個端點和在這條路線上建造道路的費用。對於...