[Usaco2008 Oct]Watering Hole 挖水井
来源:互联网 发布:淘宝客贷就是网商贷吗 编辑:程序博客网 时间:2024/04/27 20:39
相关链接:http://begin.lydsy.com/JudgeOnline/problem.php?id=1938
描述:
Description
农夫约翰决定给他的N(1<=N<=300)个牧场浇水,这些牧场被自然的命名为1..N。 他可以给一个牧场引入水通过
在这个牧场挖一口井或者修一条管道使这个牧场和一个已经有水的牧场连接。 在牧场i挖一口井的花费是w_i(1<=
w_i<=100000)。 修建一条水管连接牧场i和牧场j的花费是p_ij(1<=p_ij<=100000;p_ij=p_ji;p_ii=0)。 请确
定农夫约翰为了完成浇灌所有的牧场所需的最小的总花费。
在这个牧场挖一口井或者修一条管道使这个牧场和一个已经有水的牧场连接。 在牧场i挖一口井的花费是w_i(1<=
w_i<=100000)。 修建一条水管连接牧场i和牧场j的花费是p_ij(1<=p_ij<=100000;p_ij=p_ji;p_ii=0)。 请确
定农夫约翰为了完成浇灌所有的牧场所需的最小的总花费。
Input
第1行:一个单独的整数n。
第2..n+1行:第i+1行包含一个单独的整数w_i。
第n+2..2n+1行:第n+1+i行包含n个用空可分开的整数;其中第j个数是p_ij。
第2..n+1行:第i+1行包含一个单独的整数w_i。
第n+2..2n+1行:第n+1+i行包含n个用空可分开的整数;其中第j个数是p_ij。
Output
第1行:一个单独的整数,表示花费。
Sample Input
454430 2 2 22 0 3 32 3 0 42 3 4 0输入说明: 这里有4个牧场,修井和修管道的代价如图。
Sample Output
9 输出说明: 农夫约翰可以在第4个牧场修井,并且将每个牧场和第一个连接起来,这样,花费是3+2+2+2=9。
这个题目个人觉得是非常考技巧的一个题目。对于这个题刚开始做就感觉像生成树但就是因为他的通水有两种方式(接水管或者挖井)就感觉不靠谱,但是仔细想下在最有解中至少有一块地要挖水井,所以就想到假设一个点n+1作为挖水井的边即i-n+1的边表示在i这块地挖水井,于是就可以放心的使用最小生成树构造联通图啦。。。
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct Edge{ int qs,zz,w;}E[100000];long long f[1000],ans=0,k=0,n,m,w[1000],jl[1000];int find(int x){ return x==f[x]?x:f[x]=find(f[x]);}void uinon(int x,int y){ int p=find(x),q=find(y); if (p!=q) { f[p]=q; }}int cmp(const Edge &x,const Edge &y){ return x.w<y.w;}int main(){ scanf("%d",&n); for (int i=1;i<=n;++i) { scanf("%d",&w[i]); } for (int i=1;i<=n+1;++i) f[i]=i; for (int i=1;i<=n;++i) for (int j=1;j<=n;++j) { int x; scanf("%d",&x); if (x!=0) { m++; E[m].qs=i; E[m].zz=j; E[m].w=x; } } for (int i=1;i<=n;++i) { m++; E[m].qs=i; E[m].zz=n+1; E[m].w=w[i]; m++; E[m].qs=n+1; E[m].zz=i; E[m].w=w[i]; } sort(E+1,E+m+1,cmp); int k=0; for (int j=1;j<=m;++j) { if (find(E[j].qs)!=find(E[j].zz)) { uinon(E[j].qs,E[j].zz); ans+=E[j].w; k++; } if (k==n) { break; } } printf("%lld",ans); return 0;}
对于这个题,AC后感觉建图和建模还是获得不少。。
0 0
- [Usaco2008 Oct]Watering Hole 挖水井
- USACO oct. 09 Watering Hole
- Watering Hole
- SOJ 3366 watering hole
- [USACO08OCT]Watering Hole
- [Usaco08Oct] Watering Hole
- [USACO08OCT]Watering Hole
- Watering Hole(题解)
- 【USACO08OCT】浇水洞Watering Hole
- 图论之Watering Hole
- [Bzoj1601][Usaco2008 Oct]灌水
- bzoj1601 [Usaco2008 Oct]灌水
- [BZOJ1601] [Usaco2008 Oct]灌水
- [BZOJ1601][Usaco2008 Oct]灌水
- bzoj1601[Usaco2008 Oct]灌水
- bzoj1601【Usaco2008 Oct】灌水
- [Usaco2008 Oct]灌水(MST)
- BZOJ1601: [Usaco2008 Oct]灌水
- virtualbox修改虚拟机mac地址后不能识别网卡问题
- Unity 3D——物理引擎之碰撞器
- JSP概述
- 如何做一个从底部弹出的activity
- 如何杀掉指定进程,或指定类型进程(LPK病毒防护)
- [Usaco2008 Oct]Watering Hole 挖水井
- webview调用系统的相册
- 【40.17%】【codeforces 569B】Inventory
- C#和VB.net代码转换工具
- C++坑爹的字符串之从后往前处理字符串
- .off文件格式(Object file format(.off))简介
- url传递参数乱码
- 光盘文件系统-ISO9660(CDFS)、UDF
- 文章备份