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] 挖水井 (第三次考试大整理)的更多相关文章

  1. 186. [USACO Oct08] 牧场旅行 (第三次考试大整理)

    186. [USACO Oct08] 牧场旅行 输入文件:pwalk.in   输出文件:pwalk.out   简单对比 时间限制:1 s   内存限制:128 MB n个被自然地编号为1..n奶牛 ...

  2. 185. [USACO Oct08] 挖水井

    185. [USACO Oct08] 挖水井(点击转到COGS) 输入文件:water.in   输出文件:water.out   时间限制:1 s   内存限制:128 MB 描述 农夫约翰决定给他 ...

  3. 157. [USACO Nov07] 奶牛跨栏(第三次考试大整理)

    157. [USACO Nov07] 奶牛跨栏 输入文件:hurdles.in   输出文件:hurdles.out   简单对比 时间限制:1 s   内存限制:128 MB 译 by CmYkRg ...

  4. [NOIP2012] 同余方程(第三次考试大整理)

    1265. [NOIP2012] 同余方程 输入文件:mod.in   输出文件:mod.out   简单对比 时间限制:1 s   内存限制:128 MB [题目描述] 求关于 x 的同余方程 ax ...

  5. 186. [USACO Oct08] 牧场旅行

    186. [USACO Oct08] 牧场旅行(点击转到COGS) 输入文件:pwalk.in   输出文件:pwalk.out 时间限制:1 s   内存限制:128 MB 描述 n个被自然地编号为 ...

  6. cogs 184. [USACO Oct08] 搭建篱笆

    184. [USACO Oct08] 搭建篱笆 ★★   输入文件:quad.in   输出文件:quad.out   简单对比时间限制:1 s   内存限制:128 MB 勤奋的农夫约翰想要修建一个 ...

  7. cogs 186. [USACO Oct08] 牧场旅行 树链剖分 LCA

    186. [USACO Oct08] 牧场旅行 ★★☆   输入文件:pwalk.in   输出文件:pwalk.out   逐字节对比时间限制:1 s   内存限制:128 MB n个被自然地编号为 ...

  8. 任正非:华为三十年大限快到了 想不死就得新生(建立战略预备队)cool

    华为心声社区官方微信今日发布了任正非8月15日在华为公司内部做的关于战略预备队建设汇报的讲话.讲话内容中提到,华为公司需要组织.结构.人才等所有一切都变化,通过变化使新的东西成长起来.   任正非表示 ...

  9. 【USACO 2.1.3】三值的排序

    [题目描述] 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候.在这个任务中可能的值只有三种1,2和3.我们用交换的方法把他排 ...

随机推荐

  1. java中变量的线程安全性

    静态变量:线程非安全.静态变量即类变量,位于方法区,为所有对象共享,共享一份内存,一旦静态变量被修改,其他对象均对修改可见,故线程非安全.实例变量:单例模式(只有一个对象实例存在)线程非安全,非单例线 ...

  2. HDU 2973 YAPTCHA (威尔逊定理)

    YAPTCHA Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  3. spring boot-8.静态资源映射

    1.webjars WebJars是将客户端(浏览器)资源(javascript,Css等)打成jar包文件,以对资源进行统一依赖管理.WebJars的jar包部署在Maven中央仓库上.官网地址:h ...

  4. 设计模式之单例模式(Singleton Pattern)

    单例模式是最简单的设计模式之一.属于创建型模式,它提供了一种创建对象的最佳方式.使应用中只存在一个对象的实例,并且使这个单实例负责所有对该对象的调用.这种模式涉及到一个单一的类,该类负责创建自己的对象 ...

  5. 如何跳出iframe父级,打开一个链接

    假设使用window的跳转方法 ①window.parent.frames.location.href = "1.html";    //可以跳出iframe父级      此方法 ...

  6. 浏览器给openresty连接发送参数请求,查询数据库,并返回json数据

    nginx.conf配置文件 #user nobody; worker_processes 1; error_log logs/error.log; #error_log logs/error.log ...

  7. 简单CSS实现闪烁动画(+1白话讲解)

    原文:简单CSS实现闪烁动画(+1白话讲解) 本文转载于:猿2048网站⇒https://www.mk2048.com/blog/blog.php?id=icj2chj2ab 背景 本文承接自上文&l ...

  8. java.lang.StackOverflowError解决

    在使用JPA的仓储repository进行查询时,经常用到findAllbyId的方法: repository.findAllbyId() 但如果像下面的代码,当list的size量太大的话,就会报栈 ...

  9. python接口自动化 - Requests-3 高级用法

    高级用法 本篇文档涵盖了 Requests 的一些高级特性. 会话对象 会话对象让你能够跨请求保持某些参数.它也会在同一个 Session 实例发出的所有请求之间保持 cookie, 期间使用 url ...

  10. 十、LaTex数学公式初步