| Run ID | Author | Problem | Lang | Verdict | Score | Time | Memory | Code Length | Submit Time |
|---|---|---|---|---|---|---|---|---|---|
| 54854 | 张志鹏 | 最优布线问题 | C++ | Accepted | 100 | 3 MS | 424 KB | 727 | 2022-07-29 17:31:08 |
#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; }