Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
54863 | 杨竣周 | 最优布线问题 | C++ | 解答错误 | 0 | 2 MS | 500 KB | 604 | 2022-07-29 17:36:17 |
#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; }