Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
54835 李言 最优布线问题 C++ 通过 100 3 MS 376 KB 711 2022-07-29 17:26:09

Tests(5/5):


#include<bits/stdc++.h> using namespace std; int n,m,ans,k; struct bian{ int a,b,w; }sb[114514]; void add(int u,int v,int w,int i){ sb[i].a=u,sb[i].b=v,sb[i].w=w; } int p[19198]; int cmp(bian a,bian 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) find(p[x]); else return 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 a; cin>>a; add(i,j,a,++k); } } sort(sb+1,sb+n*n+1,cmp); init(); for(int i=1;i<=n*n;i++){ if(find(sb[i].a)!=find(sb[i].b)){ merge(find(sb[i].a),find(sb[i].b)); ans+=sb[i].w; } } cout<<ans; return 0; }


测评信息: