洛谷P2121 拆地毯
题目链接:https://www.luogu.com.cn/problem/P2121
最大生成树
Talk is cheap. Show me the code.
#include<bits/stdc++.h> using namespace std; int n,m; const int num=1e5+10; struct edge { int u; int v; int w; }e[num]; int ans; int cnt; int k; int s[num]; bool cmp(edge a,edge b) { return a.w>b.w; } int find_set(int x) { if(x!=s[x]) { s[x]=find_set(s[x]); } return s[x]; } void kruskal() { for(register int i=1;i<=n;i++) { s[i]=i; } sort(e+1,e+1+m,cmp); for(register int i=1;i<=m;i++) { int b=find_set(e[i].u); int c=find_set(e[i].v); if(b==c) continue; s[c]=b; ans+=e[i].w; cnt++; if(cnt==k)//一旦等于k就退出了 break; } } int main() { std::ios::sync_with_stdio(false); cin>>n>>m>>k; for(register int i=1;i<=m;i++) { cin>>e[i].u>>e[i].v>>e[i].w; } kruskal(); cout<<ans<<endl; return 0; }
本文来自博客园,作者:江上舟摇,转载请注明原文链接:https://www.cnblogs.com/LQS-blog/p/16210183.html