[bzoj1601]灌水_kruskal
灌水 bzoj-1601
题目大意:给你n块地,将两块地之间连通有代价$P_{i,j}$,单独在一块地打井需要代价$C_i$,问将所有的井都有水的代价是多少。
注释:1<=n<=300.
想法:这种题做过一遍就好了,我们新建立一个0号节点。如果两块地之间打通就在这两个点之间连边。如果这个点单独打井就将这个点与新建节点连边,权值为打井代价。然后跑最小生成树。首先我们知道,这n块地中至少有一块地是打井的,不然就算所有的点都连通,也是没有水的。所以,这个强大的算法显然是正确的。
最后,附上丑陋的代码... ...
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct Node
{
int a,b,val;
}f[1001000];
int fa[10001];
bool cmp(Node a,Node b)
{
return a.val<b.val;
}
int find(int x)
{
return x==fa[x]?x:(fa[x]=find(fa[x]));
}
bool merge(int x,int y)
{
x=find(x);y=find(y);
if(x==y) return false;
fa[x]=y;return true;
}
int main()
{
int n;
scanf("%d",&n);
int cnt=0;
for(int i=0;i<=n;i++) fa[i]=i;
for(int i=1;i<=n;i++)//向0号节点加边
{
int x;
scanf("%d",&x);
f[++cnt].a=0;
f[cnt].b=i;
f[cnt].val=x;
}
for(int i=1;i<=n;i++)//邻接矩阵,地与地之间的联通代价
{
for(int j=1;j<=n;j++)
{
int x;
cin >> x;
if(i>j)
{
f[++cnt].a=i;
f[cnt].b=j;
f[cnt].val=x;
}
}
}
sort(f+1,f+cnt+1,cmp);
int count=0;
int ans=0;
for(int i=1;i<=cnt;i++)//kruskal
{
if(merge(f[i].a,f[i].b))
{
ans+=f[i].val;
count++;
}
if(count==n) break;//注意,我们是在跑n+1个点的kruskal,所以count的退出条件是count==n
}
printf("%d\n",ans);
return 0;
}
小结:思路题,超级好玩的qwq
[bzoj1601]灌水_kruskal的更多相关文章
- [BZOJ1601] 灌水
难点:找到正确方式建图 知识点:Kruskal 分析:这种题肯定要把点权转换到边权上,但肯定无法搞到和其他点相连的边上,怎么办呢?那就再造一个点呗,这个“超级点”和所有点相连,且边权=点权,于是就可以 ...
- bzoj1601: [Usaco2008 Oct]灌水
经典延伸最小生成树问题... #include<cstdio> #include<cstring> #include<cctype> #include<alg ...
- [BZOJ1601] [Usaco2008 Oct] 灌水 (kruskal)
Description Farmer John已经决定把水灌到他的n(1<=n<=300)块农田,农田被数字1到n标记.把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水库. ...
- 【最小生成树】Bzoj1601[Usaco2008 Oct]灌水
Description Farmer John已经决定把水灌到他的n(1<=n<=300)块农田,农田被数字1到n标记.把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水库. ...
- [BZOJ1601][Usaco2008 Oct]灌水 最小生成树水题
1601: [Usaco2008 Oct]灌水 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 2121 Solved: 1393[Submit][St ...
- bzoj1601【Usaco2008 Oct】灌水
1601: [Usaco2008 Oct]灌水 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 1589 Solved: 1035 [Submit][ ...
- ML的灌水现象
(http://demonstrate.ycool.com/post.3137870.html) 看了几天 paper 和书,发现自己果然就是 zt好多东西就是不懂,那些人做的真快,我才建立起一种大致 ...
- 【BZOJ】1601: [Usaco2008 Oct]灌水(kruskal)
http://www.lydsy.com/JudgeOnline/problem.php?id=1601 很水的题,但是一开始我看成最短路了T_T 果断错. 我们想,要求连通,对,连通!连通的价值最小 ...
- 2014.06.20 (转)IEEE与论坛灌水
转自"饮水思源" 电子类学生大都知道IEEE, 这个IEEE就像一个大的BBS论坛,而这个协会下面有很多杂志,比如图像处理,信号处理,微波技术等.这些杂志就是论坛下的分版 ...
随机推荐
- 航空客户价值分析特色LRFMC模型——RFM升级
本文转载自微信公众号TIpDM. 每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 我们说RFM ...
- Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in
1.错误描述 严重: Exception sending context initialized event to listener instance of class org.springframe ...
- zk个人入门学习总结(1)
ZooKeeper是一种分布式协调服务,用于管理大型主机.在分布式环境中协调和管理服务是一个复杂的过程.ZooKeeper通过其简单的架构和API解决了这个问题.ZooKeeper允许开发人员专注于核 ...
- [SDOI2012]Longge的问题
题目大意: 网址:https://www.luogu.org/problemnew/show/P2303 大意:给定一个N,求\(\Sigma_{i=1}^N gcd(i, N);\). 题目解法: ...
- 【洛谷2986】【USACO10MAR】伟大的奶牛聚集
题面 题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, of co ...
- Luogu1121:环状最大两段子段和
题面 传送门 Sol 两种情况 第一种就是类似\(***000***000***(0表示选)\),这个可以DP 设\(h[0/1/2/3][i]\)表示到第\(i\)位的状态: \(0\):表示还没选 ...
- java把集合数据写入txt文档
List<String> list= bs.findJson(); try { BufferedWriter bw = new BufferedWriter(new FileWriter( ...
- 好用的sitemap生成器—GY SiteMap
好用的sitemap生成器-GY SiteMap 下载地址:http://www.wyxxw.cn/download-detail-6-8-14.html 网站地图可以更好的帮助搜索引擎抓取.收录网站 ...
- Kendo UI ASP.Net MVC 实现多图片及时显示加上传(其中有借鉴别人的代码,自己又精简了一下,如有冒犯,请多原谅!)
View: <div class="demo-section k-content"> @(Html.Kendo().Upload() .Name("files ...
- java微信公众号开发token验证失败的问题及解决办法
本文引自http://m.blog.csdn.net/qq_32331997/article/details/72885424 微信公众平台服务器配置时,需要引入token,但是提交的时候总是提示to ...