Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
54833 | 张志鹏 | 最优布线问题 | C++ | 解答错误 | 0 | 2 MS | 324 KB | 733 | 2022-07-29 17:26:04 |
#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;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){ 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-1;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; }