比赛 暑期小训练题 评测结果 AAAAAAAAAA
题目名称 最短网络 最终得分 100
用户昵称 ムラサメ 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2021-07-10 17:28:12
显示代码纯文本
    #include<bits/stdc++.h>
    using namespace std;
    struct node{
    	int x,y,w;
    }a[200002];
    int f[200002];
    bool cmp(node xx,node yy){
    	return xx.w<yy.w;
    }
    int find(int x){
    	if(x==f[x]) return x;
    	f[x]=find(f[x]);
    	return f[x];
    }
     
    int main(){
        freopen("agrinet.in","r",stdin);
        freopen("agrinet.out","w",stdout);
    	int n,k,m=0;
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		f[i]=i;
    		for(int j=1;j<=n;j++){
    			cin>>k;
    			if(j>i){
    				m++;
    				a[m].x=i;a[m].y=j;a[m].w=k;	
    			}	
    		}
    	}
    	sort(a+1,a+m+1,cmp);
    	int ans=0,p=1;
    	for(int i=1;i<=m;i++){
    		if(find(a[i].x)!=find(a[i].y)){
    			ans+=a[i].w;
    			f[find(a[i].x)]=a[i].y;
    			p++;
    			if(p==n) break;	
    		}
    	}
    	cout<<ans;
    	return 0;
    }