1 条题解
-
1
#include<bits/stdc++.h> using namespace std; struct edge{ int u,v,w; }; vector<edge> G; int fa[1010],ans,cnt; int find_root(int x){ if(fa[x]==x){ return x; } return fa[x]=find_root(fa[x]); } bool cmp(edge a,edge b){ return a.w<b.w; } int main(){ ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr); int a,b; cin>>a>>b; for(int i=0;i<=b;i++){ fa[i]=i; } for(int i=1;i<=b;i++){ G.push_back({0,i,a}); } for(int i=1;i<=b;i++){ for(int j=1;j<=b;j++){ int x; cin>>x; if(i<j&&x!=0){ G.push_back({i,j,x}); } } } sort(G.begin(),G.end(),cmp); for(edge it:G){ int u=find_root(it.u),v=find_root(it.v); if(u==v){ continue; } fa[u]=v; ans+=it.w; cnt++; if(cnt==b){ break; } } cout<<ans; return 0; }
信息
- ID
- 5252
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 5
- 标签
- 递交数
- 11
- 已通过
- 5
- 上传者