题解
【入门】重建电路
1 条题解
-
0
#include<bits/stdc++.h> using namespace std; int sum,cnt; struct no{ int u,v,w; }a[250050]; int fa[510]; bool cmp(no a,no b){ return a.w<b.w; } int find (int x){ if(fa[x]==x)return x; else{ fa[x]=find(fa[x]); return fa[x]; } } int hb(int x,int y) { int t1=find(x); int t2=find(y); if (t1!=t2){ fa[t1]=t2; return 1; } return 0; } int main(){ int t,n,m; cin>>t; for(int j=0;j<t;j++){ cin>>n>>m; sum=0; cnt=0; for (int i=0;i<m;i++){ cin>>a[i].u>>a[i].v>>a[i].w; } sort(a,a+m,cmp); for (int i=0;i<n;i++){ fa[i]=i; } for (int i=0;i<m;i++){ if (hb(a[i].u,a[i].v)){ sum+=a[i].w; cnt++; } if (cnt==n-1) break; } cout<<sum<<endl; } return 0; }
- 1