Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
55030 | 陶俊宸 | 最优布线问题 | C++ | 通过 | 100 | 2 MS | 376 KB | 733 | 2022-07-29 18:07:57 |
#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; }