文章
74
粉丝
0
获赞
98
访问
8.9k
#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;
}
登录后发布评论
暂无评论,来抢沙发