首页 > 代码库 > 【USACO 2008 Nov Gold】 2.Cheering up the Cows 最小生成树、
【USACO 2008 Nov Gold】 2.Cheering up the Cows 最小生成树、
题意:可以理解为给你一个图,让你建一个树,然后从某根开始走,每走一条边就要消耗两边点权+边的边权。最后再加上一个根的点权,问最少花多少代价。
题解:改变边权然后做最小生成树。
#include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 101000 #define inf 0x3f3f3f3f using namespace std; struct KSD { int u,v,len; bool operator < (const KSD &a)const{return len<a.len;} }road[N]; int p[N]; int n,m,ans=inf; int f[N];int find(int x){return x==f[x]?x:f[x]=find(f[x]);} int main() { int i,j,k; int a,b,c; scanf("%d%d",&n,&m); for(i=1;i<=n;i++) { scanf("%d",&p[i]); ans=min(ans,p[i]); f[i]=i; } for(i=1;i<=m;i++) { scanf("%d%d%d",&a,&b,&c); road[i].u=a,road[i].v=b,road[i].len=p[a]+p[b]+c*2; } sort(road+1,road+m+1); for(i=1;i<=m;i++) { int fa=find(road[i].u),fb=find(road[i].v); if(fa!=fb) { ans+=road[i].len; f[fb]=fa; } } printf("%d\n",ans); return 0; }
复制去Google翻译翻译结果
【USACO 2008 Nov Gold】 2.Cheering up the Cows 最小生成树、
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。