185.[USACO Oct08] 挖水井 (第三次考试大整理)
185. [USACO Oct08] 挖水井
输入文件:water.in 输出文件:water.out 简单对比
时间限制:1
s 内存限制:128 MB
农夫约翰决定给他的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。
(图片掉了,只好自己想象)
错因:
没有准确的记清楚算法的过程。
思路:
因为现在还不知道到底哪一个是挖通的,所以你需要新建一个“n+1”点,代表这是一个"暂时的水源"。
(一开始我的想法是枚举,但是这样做是行不通的,因为点太多了。)
暂时将这个点与其他的点都“连接”起来,连到这个刚建的“n+1”这个点上,然后再进行松弛。
那么,最终的结果即为最小的花费。
所以说,这道题除了新加了一个点以外,就是一道克鲁斯卡尔裸题!
代码酱=u=:
#include<iostream>
#include<cstdio>
#include<algorithm>
#define maxn 100001 using namespace std; int dad[maxn],n,m,u,v,w,b[maxn],tot,q,k,x; struct Zb{
int x;
int y;
int w;
bool operator < (const Zb &q)const
{
return w < q.w;
}
}a[maxn]; int find(int x){//找父亲
if(x!=dad[x]) dad[x]=find(dad[x]);
return x == dad[x] ? x : find(dad[x]);
} void unionn(int x,int y){//找祖先,合并为同一祖先
int r1=find(x);
int r2=find(y);
if(r1!=r2)
dad[r1]=r2;
} int main()
{
//freopen("water.in","r",stdin);
//freopen("water.out","w",stdout);
cin>>n;
for(int i=;i<=n;i++){
cin>>b[i];
}
for(int i=;i<=n;i++) dad[i]=i;
for(int i=;i<=n;++i)
{
for(int j=;j<=n;++j){
cin>>x;
if(x!=){//将x所代表的连通的点记录下来
m++;//记录有几个点是连通的
a[m].x=i,a[m].y=j,a[m].w=x;
}
}
}
for(int i=;i<=n;i++)//将需要挖井的费用加入
{
m++;
a[m].x=i;
a[m].y=n+;
a[m].w=b[i];
m++;
a[m].x=n+;
a[m].y=i;
a[m].w=b[i];
}
sort(a+,a+m+);//将树从小到大排序
k=;
for(int i=;i<=m;i++){
int r1=find(a[i].x);
int r2=find(a[i].y);
if(r1!=r2)
{
dad[r1]=r2;
tot+=a[i].w;//统计下总费用
k++;
}
if(k==n) break;//当找完所有点
}
cout<<tot<<endl;
//fclose(stdin);
//fclose(stdout);
return ;
}
185.[USACO Oct08] 挖水井 (第三次考试大整理)的更多相关文章
- 186. [USACO Oct08] 牧场旅行 (第三次考试大整理)
186. [USACO Oct08] 牧场旅行 输入文件:pwalk.in 输出文件:pwalk.out 简单对比 时间限制:1 s 内存限制:128 MB n个被自然地编号为1..n奶牛 ...
- 185. [USACO Oct08] 挖水井
185. [USACO Oct08] 挖水井(点击转到COGS) 输入文件:water.in 输出文件:water.out 时间限制:1 s 内存限制:128 MB 描述 农夫约翰决定给他 ...
- 157. [USACO Nov07] 奶牛跨栏(第三次考试大整理)
157. [USACO Nov07] 奶牛跨栏 输入文件:hurdles.in 输出文件:hurdles.out 简单对比 时间限制:1 s 内存限制:128 MB 译 by CmYkRg ...
- [NOIP2012] 同余方程(第三次考试大整理)
1265. [NOIP2012] 同余方程 输入文件:mod.in 输出文件:mod.out 简单对比 时间限制:1 s 内存限制:128 MB [题目描述] 求关于 x 的同余方程 ax ...
- 186. [USACO Oct08] 牧场旅行
186. [USACO Oct08] 牧场旅行(点击转到COGS) 输入文件:pwalk.in 输出文件:pwalk.out 时间限制:1 s 内存限制:128 MB 描述 n个被自然地编号为 ...
- cogs 184. [USACO Oct08] 搭建篱笆
184. [USACO Oct08] 搭建篱笆 ★★ 输入文件:quad.in 输出文件:quad.out 简单对比时间限制:1 s 内存限制:128 MB 勤奋的农夫约翰想要修建一个 ...
- cogs 186. [USACO Oct08] 牧场旅行 树链剖分 LCA
186. [USACO Oct08] 牧场旅行 ★★☆ 输入文件:pwalk.in 输出文件:pwalk.out 逐字节对比时间限制:1 s 内存限制:128 MB n个被自然地编号为 ...
- 任正非:华为三十年大限快到了 想不死就得新生(建立战略预备队)cool
华为心声社区官方微信今日发布了任正非8月15日在华为公司内部做的关于战略预备队建设汇报的讲话.讲话内容中提到,华为公司需要组织.结构.人才等所有一切都变化,通过变化使新的东西成长起来. 任正非表示 ...
- 【USACO 2.1.3】三值的排序
[题目描述] 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候.在这个任务中可能的值只有三种1,2和3.我们用交换的方法把他排 ...
随机推荐
- vue2.X + HTML5 plus 拍照和调用设备相册 另附 图片转base64和压缩图片方法
HTML5 部分 <button @click="tesCamera()" type="button" :disabled="isshStatu ...
- javascrpt的string和Boolean类型
string类型用于表示由零或多个16位unicode字符组成字符序列,即 字符串,字符可以由双引号(“)或单引号(‘)表示 tostring()与 string() 语法:str.tostring( ...
- ElasticSearch 7.3.0 查询、修改、删除 文档操作
PUT chuyuan/_doc/ { "name":"xiaolin", , "sex":"F", "lov ...
- 数组转字符串,字符串转数组 join(), split();
join() join() 方法用于把数组中的所有元素放入一个字符串. 元素是通过指定的分隔符进行分隔的. arrayObject.join(separator), 默认为使用逗号分隔 var ar ...
- CGAL 属性配置
libgmp-10.lib libmpfr-4.lib boost_system-vc120-mt-gd-1_63.lib D:\dev\CGAL-4.9\include D:\dev\CGAL-4. ...
- 【优质blog、网址】置顶
一.大公司等技术blog: blog1: http://blog.csdn.net/mfcing/article/details/51577173 blog2: http://blog.csdn. ...
- D - 秋实大哥与快餐店
秋实大哥与快餐店 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit ...
- HNUSTOJ-1674 水果消除(搜索或并查集)
1674: 水果消除 时间限制: 2 Sec 内存限制: 128 MB提交: 335 解决: 164[提交][状态][讨论版] 题目描述 “水果消除”是一款手机游戏,相信大家都玩过或玩过类似的游戏 ...
- Vuejs——slot内容分发
①概述: 简单来说,假如父组件需要在子组件内放一些DOM,那么这些DOM是显示.不显示.在哪个地方显示.如何显示,就是slot分发负责的活. ②默认情况下父组件在子组件内套的内容,是不显示的. 例如代 ...
- Python中字典合并的四种方法
字典是Python语言中唯一的映射类型.映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关系,通常被认为是可变的哈希表.字典对象是可变的,它是一个容器类型,能存储任意个数的 ...