提交时间:2022-07-29 17:31:08
运行 ID: 54854
#include<bits/stdc++.h> using namespace std; int n; struct stu{ int a,b,w; }; stu e[100001]; int p[100001]; int cnt; int ans; int cmp(stu a,stu b){ return a.w<b.w; } void init(){ for(int i=1;i<=n*n;i++) p[i]=i; } int find(int x){ if(p[x]==x) return x; else return p[x]=find(p[x]); } void merge(int a,int b){ p[b]=a; } int main(){ cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ int t; cin>>t; int a1=i,a2=j; if(i!=j){ e[++cnt].a=a1,e[cnt].b=a2,e[cnt].w=t; } } } sort(e+1,e+cnt+1,cmp); init(); for(int i=1;i<=n*n;i++){ if(find(e[i].a)!=find(e[i].b)){ merge(find(e[i].a),find(e[i].b)); ans+=e[i].w; } } cout<<ans; return 0; }