[USACO Oct08] 挖水井题解
来源:互联网 发布:java随机生成字母数字 编辑:程序博客网 时间:2024/04/27 15:25
农夫约翰决定给他的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)。
请确定农夫约翰为了完成浇灌所有的牧场所需的最小的总花费。
题目名称:water
输入格式:
第1行:一个单独的整数n。
第2..n+1行:第i+1行包含一个单独的整数w_i。
第n+2..2n+1行:第n+1+i行包含n个用空可分开的整数;其中第j个数是p_ij。
输入样例(file water.in):
4
5
4
4
3
0 2 2 2
2 0 3 3
2 3 0 4
2 3 4 0
输入说明:
这里有4个牧场,修井和修管道的代价如图。
输出格式:
第1行:一个单独的整数,表示花费。
输出样例(file water.out):
9
输出说明:
农夫约翰可以在第4个牧场修井,并且将每个牧场和第一个连接起来,这样,花费是3+2+2+2=9。
分析:生成树的裸题,到要用到一个小技巧:将挖水井的费用做成一条从i到n+1的边,再用克鲁斯卡尔算法即可。
#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(){ cin>>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; } } cout<<ans; return 0;}
0 0
- [USACO Oct08] 挖水井题解
- 【排列组合】USACO Oct08 搭建篱笆
- [USACO Oct08] 搭建篱笆解题报告
- 【Usaco Oct08 Gold】奶牛串门(Pasture Walking)(LCA)
- 【4连WA】【Usaco Oct08 Gold】奶牛串门(Pasture Walking)
- USACO - Oct08 Gold Watering Hole 挖井 Kruskal演算法+点权转边权
- [Usaco2008 Oct]Watering Hole 挖水井
- ACM 188. [USACO Oct08] 被破坏的电力系统(缩点+SPFA)
- 【题】【倍增】NKOJ 1536 奶牛串门【Usaco Oct08 Gold】(Pasture Walking)
- USACO Cow Tours 题解
- USACO 2.1 Overfencing 题解
- USACO-Transformations 题解
- USACO Section 1.1 题解
- USACO Section 1.2 题解
- USACO Section 1.3 题解
- USACO Section 1.4 题解
- USACO Section 1.5 题解
- USACO Section 2.1 题解
- 三种方法进行分水岭分割
- 2015-第六周-复数类
- 第五周项目四 静态成员应用
- 第六周 项目二 我的数组类
- android如何静默方式来安装apk
- [USACO Oct08] 挖水井题解
- 第六周 项目二-我的数组类
- 第六周 项目二 我的数组类
- C#中ExecuteReader、ExecuteNonQuery、ExecuteScalar、SqlDataReader、SqlDataAdapter应该怎么用?
- AndroidStudio启动AVD时报错x86 emulation currently requires hardware acceleration
- github之管理修改,撤销修改
- android 一个activity定时更新另一个activity的UI
- Android Studio添加函数注释
- GDAL实现图像反色