Kruskal算法-2025/11/24

Kruskal算法

#include<bits/stdc++.h>
using namespace std;
const int N = 2e5  + 10;

struct Edge{
	int a,b,c;
	bool operator<(const Edge &edge) const{
		return c < edge.c;
	}
};

Edge edge[N];
int n , m;
int p[N];

int find(int x){
	if(x != p[x]) p[x] = find(p[x]);
	return p[x];
}

int main(){
	cin >> n >> m;
	
	for(int i = 1; i <= n; i++) p[i] = i;
	
	for(int i = 1; i <= m; i++){
		int a,b,c;
		cin >> edge[i].a >> edge[i].b >> edge[i].c;
	}
	
	sort(edge + 1, edge + 1 + m);
	
	int res = 0, cnt = 0;
	for(int i = 1; i <= m; i++){
		int a = edge[i].a , b= edge[i].b, c = edge[i].c;
		a = find(a) , b = find(b);
		if(a != b) {
			res += c;
			p[a] = b;
			cnt ++;
		}
	}
	
	if(cnt < n - 1) puts("impossible");
	else cout << res << "\n";
	
	return 0;
}
posted @ 2025-11-28 23:00  XYu1230  阅读(4)  评论(0)    收藏  举报