提交时间:2022-07-29 18:07:57

运行 ID: 55030

#include<bits/stdc++.h> using namespace std; int n,f[100],num,cnt,sum; struct edge{ int a,b,w; }e[10000]; int finddad(int x){ if(f[x]==x) return x; return finddad(f[x]); } void merge(int x,int y){ int fx=finddad(x),fy=finddad(y); f[fy]=fx; } bool cmp(edge e1,edge e2){ return e1.w<e2.w; } int main(){ scanf("%d",&n); for(int i=0;i<n;i++) f[i]=i; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ scanf("%d",&num); e[i*n+j].a=i,e[i*n+j].b=j,e[i*n+j].w=num; } } sort(e,e+n*n,cmp); for(int i=0;i<n*n;i++){ edge ne=e[i]; if(finddad(ne.a)!=finddad(ne.b)){ merge(ne.a,ne.b); cnt++; sum+=ne.w; if(cnt==n-1){ printf("%d",sum); return 0; } } } return 0; }