提交时间:2022-07-29 17:36:17

运行 ID: 54863

#include<bits/stdc++.h> using namespace std; struct edge{ int v,a,b; }; int n,ans,m; edge e[200001]; bool f[100001]; void input(){ int c; scanf("%d",&n); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ scanf("%d",&c); if(c){ e[++m].a=i; e[m].b=j; e[m].v=c; e[++m].a=j; e[m].b=i; e[m].v=c; } } } } bool cmp(edge a,edge b){ return a.v<b.v; } void kruskal(){ sort(e+1,e+m+1,cmp); for(int i=1;i<=m;i++){ if(f[e[i].a]+f[e[i].b]<2){ f[e[i].a]=f[e[i].b]=1; ans+=e[i].v; } } } int main(){ input();kruskal();printf("%d",ans); return 0; }