文章
211
粉丝
1
获赞
1153
访问
43.9k
#include <bits/stdc++.h>
using namespace std;
const int maxn = 200005;
struct node{
int u,v,w;
};
vector<node> g;
bool cmp(node a,node b){
return a.w < b.w;
}
int rt[maxn];
int find(int x){
if (x == rt[x]) return x;
rt[x] = find(rt[x]); // 路径压缩
return rt[x];
}
int main(){
int t;
cin >> t;
while(t--){
g.clear();
int n,m;
cin >> n >> m;
int a,b,c;
for(int i=0;i<m;i++){
cin >> a >> b >> c;
int exist = 0;
for(auto& it:g){
if((it.u == a && it.v == b)||(it.u == b && it.v == a)){
it.w = c;
exist = 1;
break;
}
}
if(exist == 0)
g.push_back({a,b,c});
for(int i=0;i<n;i++)
rt[i] = i;
sort(g.begin(),g.end(),cmp);
int cnt=0,sum=0;
for(auto it:g){
int u = it.u;
int v = it.v;
if(find(u) != find(v)){
cnt++;
sum += it.w;
rt[find(u)] = find(v);
}
if(cnt...
登录后发布评论
暂无评论,来抢沙发