提交时间:2022-07-29 17:59:51
运行 ID: 55003
#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-1,e[i*n+j].b=j-1,e[i*n+j].w=num; } } sort(e,e+n*n,cmp); for(int i=0;i<n*n;i++){ int ne=e[i]; if(!finddad(e[i].a)||!finddad(e[i].b)){ merge(e[i].a,e[i].b); cnt++; sum+=e[i].w; if(cnt==n-1){ printf("%d",sum); return 0; } } } return 0; }