只一行,一个整数,即花费最大的费用。如果不可能连接通所有牛棚,输出-1。
思路:
思路很简单,典型的一道“最小”生成树只需要将“<”改至“>”,也就是说还是可以照常用Keuskal算法。话不多说上代码。
CODE
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int fa[1001]; int n,m,ans,num; struct cow { int bb,son,money; }; cow tree[20001]; int find(int x) { if(fa[x]!=x) fa[x]=find(fa[x]); return fa[x]; } void add(int x,int y) { fa[fa[x]]=fa[y]; } bool cmp(cow x,cow y) { return x.money>y.money; } int main() { cin>>n>>m; for(int i=1;i<=n;i++) fa[i]=i; for(int i=1;i<=m;i++) { cin>>tree[i].bb>>tree[i].son>>tree[i].money; } sort(tree+1,tree+1+m,cmp); for(int i=1;i<=n;i++) { if(find(tree[i].bb)!=find(tree[i].son)) { add(tree[i].bb,tree[i].son); ans=ans+tree[i].money; num++; } } if(num==n-1) { cout<<ans; return 0; } else { cout<<-1; return 0; } }
原文:https://www.cnblogs.com/YYCether666/p/11290624.html