【模板】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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章