【模板】Kruskal

#include<bits/stdc++.h>
using namespace std;
const int z = 1024;
int parent[z], n, m;
struct edge{
	int f, t, w;
	bool operator <(const edge x) const{
		return w < x.w;
	}
} line[z*4];
void initial(int key) {
	for(int i = 1;i <= key;++i) 
		parent[i] = i;
	return;
}
int find(int x) {
	if(x != parent[x]) 
		parent[x] = find(parent[x]);
	return parent[x];
}
int kruskal() {
	sort(line+1,line+m+1);
	initial(n);
	int p = 0, tmp = 0;
	for(int i = 1;i <= m&&tmp <= n-1;++i) {
		int x = line[i].f;
		int y = line[i].t;
		if(find(x) != find(y)) {
			parent[x] = y;
			p += line[i].w;
			tmp++;
		}
	}
	return p;
}
int main() {
	scanf("%d %d",&n,&m);
	for(int i = 1;i <= m;++i) 
		scanf("%d %d %d",&line[i].f,&line[i].t,&line[i].w);
	printf("%d",kruskal());
	return 0;
}

@bikuhiku

posted @ 2022-06-05 20:56  bikuhiku  阅读(5)  评论(0编辑  收藏  举报