top1编程
← 返回题目
题解

【入门】重建电路

1 条题解

  • 0
    @ 2026-7-29 0:19:14
    #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