top1编程
← 返回题目
题解

最短网络

1 条题解

  • 0
    @ 2026-7-29 0:21:35
    #include<bits/stdc++.h>
    using namespace std;
    int f[105];
    struct node{
    	int x,y,len;
    };
    node a[100005];
    int n,t,k=0;
    bool cmp(node n1,node n2){
    	return n1.len<n2.len;
    }
    int find(int x){
    	return x==f[x]?x:f[x]=find(f[x]);
    }
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=n;j++){
    			cin>>t;
    			if(i<j){
    				k++;
    				a[k].x=i;
    				a[k].y=j;
    				a[k].len=t;
    			}
    		}
    	}
    	sort(a+1,a+k+1,cmp);
    	for(int i=1;i<=n;i++){
    		f[i]=i;
    	}
    	int s=0;
    	int c=0;
    	for(int i=1;i<=k;i++){
    		int fx=find(a[i].x);
    		int fy=find(a[i].y);
    		if(fx!=fy){
    			f[fx]=fy;
    			c++;
    			s=s+a[i].len;
    		}
    		if(c==n-1){
    			cout<<s;
    			break;
    		}
    	}return 0;
    }
    
    • 1