USACO 2008 November Gold Cheering up the Cows /// MST oj24381
Posted zquzjx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了USACO 2008 November Gold Cheering up the Cows /// MST oj24381相关的知识,希望对你有一定的参考价值。
题目大意:
输入n,p;n个点,p条路
接下来n行输入c[];在各个点需要花费的时间
接下来p行输入u,v,w;u点到v点的路需要花费时间w
求经过所有点且最后回到起点的最少花费时间
https://blog.csdn.net/HY_VFenux/article/details/68954199
将每条边的权值存为 路径花费*2+两端点花费
Kruscal求MST 最后加上开始位于起点的花费 即各个点中最少花费的一个
#include <bits/stdc++.h> #define INF 0x3f3f3f3f #define N 10005 #define P 100005 using namespace std; int n,m,a[N],root[N]; struct NODE { int n,t,c; bool operator <(const NODE& b) const{ return c<b.c; } }no[P]; int getroot(int man) { if(root[man]==man) return man; return root[man]=getroot(root[man]); } int main() { scanf("%d%d",&n,&m); int mina=INF; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); root[i]=i; mina=min(mina,a[i]); } int len=0; while(m--) { int u,v,w; scanf("%d%d%d",&u,&v,&w); no[len++]={u,v,2*w+a[u]+a[v]}; } sort(no,no+len); int cnt=0, ans=0; for(int i=0;i<len;i++) { int u=no[i].n, v=no[i].t, w=no[i].c; int ru=getroot(u), rv=getroot(v); if(ru!=rv){ root[rv]=ru; cnt++; ans+=w; }//printf("%d ",ans); if(cnt==n-1) break; } printf("%d ",ans+mina); return 0; }
以上是关于USACO 2008 November Gold Cheering up the Cows /// MST oj24381的主要内容,如果未能解决你的问题,请参考以下文章
USACO 2006 November Gold Corn Fields /// 状压 oj23941
POJ3659 [usaco2008jan_gold]电话网络
BZOJ 1589 Trick or Treat on the Farm (tarjan缩点,记忆化搜索)[Usaco 2008 Dec Gold]BZOJ计划
BZOJ 1589 Trick or Treat on the Farm (tarjan缩点,记忆化搜索)[Usaco 2008 Dec Gold]BZOJ计划