【模板】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;
}

猜你喜欢

转载自blog.csdn.net/kcn999/article/details/84895798