文章

74

粉丝

0

获赞

98

访问

8.9k

头像
畅通工程 (kruskal + 并查集)题解:
P1312 浙江大学机试题
发布于2025年8月31日 17:39
阅读数 26

#include<bits/stdc++.h>
using namespace std;

const int maxn = 100 + 5;
struct node{
	int u, v, w;
}edge[maxn * maxn];

bool cmp(node a, node b){
	return a.w < b.w;
}

int fa[maxn];
int find(int x) {
	return fa[x] == x ? x : (fa[x] = find(fa[x]));
}

int main(){
	
	int n, m;
	while(cin >> n >> m && n != 0) {
		for(int i = 0; i < n; i ++) cin >> edge[i].u >> edge[i].v >> edge[i].w;
		
		for(int i = 1; i <= m; i ++) fa[i] = i;
		
		sort(edge, edge + n, cmp);
		
		int sum = 0; // 总花费
		int path = 0; // 总路线条数
		for(int i = 0; i < n; i ++) {
			int fx = find(edge[i].u);
			int fy = find(edge[i].v);
			if(fx != fy) {
				fa[fx] = fy;
				sum += edge[i].w;
				path ++;
			}
		}
		
		if(path < m - 1) cout << '?' << endl;
		else cout << sum << endl;
	}
	
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发