1. 程式人生 > >【模板】Kruskal

【模板】Kruskal

int n, m;
struct Edge
{
	int u, v, w;
}a[MAX_M];
// 令a關於w升序排列 
int r[MAX_N];
// 並查集 
int Find(int x)
{
	if(r[x] ^ x) return r[x] = Find(r[x]);
	return x; 
}
int MST;

void Kruskal()
{
	for(register int i = 1; i <= n; ++i) r[i] = i;
	for(register int i = 1; i <= m; ++i)
	{
		if(Find(a[i].u) ^
Find(a[i].v)) { r[Find(a[i].u)] = Find(a[i].v); MST += a[i].w; } } cout << MST; return 0; }