D.引水工程

Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 118  Solved: 41 [Submit][Status][Web Board]

Description

南水北调工程是优化水资源配置、促进区域协调发展的基础性工程,是新中国成立以来投资额最大、涉及面最广的战略性工程,事关中华民族长远发展。 “南水北调工程”,旨在缓解中国华北西北地区水资源短缺的国家战略性工程。就是把中国长江流域丰盈的水资源抽调一部分送到华北和西北地区。我国南涝北旱,南水北调工程通过跨流域的水资源合理配置,促进南北方经济、社会与人口、资源、环境的协调发展。

整个工程分东线、中线、西线三条调水线。东线工程位于东部,因地势低需抽水北送至华北地区。中线工程从汉水与其最大支流丹江交汇处的丹江口水库引水,自流供水给黄淮海平原大部分地区,20多座大中城市;西线工程在青藏高原上,由长江上游向黄河上游补水。

现在有N个区域需要建设水资源工程,它们可以自建水库解决缺水问题,也可以从已有水源的地区建立管道引水过来。当然,这些建设都需要大量投资。

你能不能给出一个优化水资源配置方案,在保证每个区域都能用上水的前提下,使得整个引水工程费用最低。

Input

第一行:     K           表示有多少组测试数据。

接下来对每组测试数据:

第1行:      N               表示有N个区域( 1<=N<=300 )

第2 行:    W1  W2  …. WN  Wi表示第i个区域自建水库需要的费用

再有N行:   Pi1  Pi2   ….  Pin   Pij表示建立第i个区域与第j个区域引水管道的费用

1≤k≤10      1≤N≤200    1≤Wi  Pij≤100000    Pij = Pji   Pii=0 (i=1,…, N)

所有数据都是整数。 数据之间有一个空格。

Output

对于每组测试数据,输出占一行,即建立整个引水工程的最小费用。

Sample Input

1
5
5 4 4 3 6
0 2 2 2 2
2 0 3 3 3
2 3 0 4 5
2 3 4 0 1
2 3 5 1 0

Sample Output

10

HINT

 

Source

第八届河南省赛

题解:克鲁斯卡尔ac,然而我的prime wawawa;克鲁斯卡尔想法,把0代表引水花费,然后最小生成树就可以了,prime想复杂了,想着比较连接城市的花费与直接引水花费比较的;但是wa;

改成克鲁斯卡尔想法,prime也过了;

克鲁斯卡尔:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<set>
using namespace std;
#define mem(x,y) memset(x,y,sizeof(x))
#define SI(x) scanf("%d",&x)
#define SL(x) scanf("%lld",&x)
#define PI(x) printf("%d",x)
#define PL(x) printf("%lld",x)
#define P_ printf(" ")
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
typedef long long LL;
const int MAXN=350;
struct Node{
int u,v,w;
Node init(int x=0,int y=0,int z=0)/*:u(x),v(y),w(z)*/{
u=x;v=y;w=z;
}
friend bool operator < (Node a,Node b){
return a.w<b.w;
}
}dt[1010];
int ans;
int pre[MAXN];
int find(int x){
return pre[x]=x==pre[x]?x:find(pre[x]);
}
void merge(Node a){
int f1=find(a.u),f2=find(a.v);
if(f1!=f2)pre[f1]=f2,ans+=a.w;
}
int main(){
int K,N;
SI(K);
while(K--){
SI(N);
int x,k=0;
for(int i=0;i<=N;i++)
for(int j=1;j<=N;j++){
SI(x);
if(i<j){
dt[k++].init(i,j,x);
}
}
sort(dt,dt+k);
//for(int i=0;i<k;i++)printf("%d %d %d\n",dt[i].u,dt[i].v,dt[i].w);
for(int i=0;i<=N;i++)pre[i]=i;
ans=0;
for(int i=0;i<k;i++)merge(dt[i]);
printf("%d\n",ans);
}
return 0;
}

  prime  ac:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<set>
using namespace std;
#define mem(x,y) memset(x,y,sizeof(x))
#define SI(x) scanf("%d",&x)
#define SL(x) scanf("%lld",&x)
#define PI(x) printf("%d",x)
#define PL(x) printf("%lld",x)
#define P_ printf(" ")
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
typedef long long LL;
const int MAXN=350;
int w[MAXN];
int p[MAXN][MAXN];
int N;
int dis[MAXN];
int vis[MAXN];
int usd[MAXN];
void prim(){
mem(vis,0);
// mem(usd,0); for(int i=0;i<=N;i++)dis[i]=p[0][i];
vis[0]=1;
int ans=0,flot=0;
while(true){
int temp=INF,k;
for(int i=0;i<=N;i++)
if(!vis[i]&&temp>dis[i])temp=dis[k=i];
if(temp==INF)break;
//printf("%d %d %d\n",k,w[k],temp);
// if(temp<w[k])ans+=temp;
// else ans+=w[k],usd[k]=1;
ans+=temp;
vis[k]=1;
for(int i=0;i<=N;i++)
if(!vis[i])dis[i]=min(dis[i],p[k][i]);
}
/*int x=INF;
for(int i=0;i<N;i++)
if(!usd[i])x=min(x,w[i]);*/
printf("%d\n",ans);//
}
int main(){
int K;
SI(K);
while(K--){
SI(N);
//for(int i=0;i<N;i++)SI(w[i]);
for(int i=0;i<=N;i++)
for(int j=1;j<=N;j++)
SI(p[i][j]);
prim();
}
return 0;
}

  

第八届河南省赛D.引水工程(kruthcra+prime)的更多相关文章

  1. POJ-2421Constructing Roads,又是最小生成树,和第八届河南省赛的引水工程惊人的相似,并查集与最小生成树的灵活与能用,水过~~~

    Constructing Roads Time Limit: 2000MS   Memory Limit: 65536K               Description There are N v ...

  2. 第八届河南省赛F.Distribution(水题)

    10411: F.Distribution Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 11  Solved: 8 [Submit][Status] ...

  3. 第八届河南省赛G.Interference Signal(dp)

    G.Interference Signal Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 35  Solved: 17 [Submit][Status ...

  4. 第八届河南省赛C.最少换乘(最短路建图)

    C.最少换乘 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 94  Solved: 25 [Submit][Status][Web Board] De ...

  5. 第八届河南省赛B.最大岛屿(dfs)

    B.最大岛屿 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 30  Solved: 18 [Submit][Status][Web Board] De ...

  6. zzuoj 10409 10409: D.引水工程

    10409: D.引水工程 Time Limit: 2 Sec  Memory Limit: 128 MBSubmit: 96  Solved: 34[Submit][Status][Web Boar ...

  7. 河南省第八届ACM省赛---引水工程

    引水工程 时间限制:2000 ms  |  内存限制:65535 KB 难度: 描述 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程,是新中国成立以来投资额最大.涉及面最广的战略性工程,事 ...

  8. 第八届河南省省赛 A.挑战密室

    挑战密室 时间限制: ms | 内存限制: KB 难度: 描述 R组织的特工Dr. Kong 为了寻找丢失的超体元素,不幸陷入WTO密室.Dr. Kong必须尽快找到解锁密码逃离,否则几分钟之后,WT ...

  9. Nyoj 引水工程(最小生成树)

    描述 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程,是新中国成立以来投资额最大.涉及面最广的战略性工程,事关中华民族长远发展.“南水北调工程”,旨在缓解中国华北和西北地区水资源短缺的国家 ...

随机推荐

  1. UIWebViewでローカルにあるHTMLを表示する&iOS6からtextAlignmentで指定する値が変更になった

    [objective-c]UIWebViewでローカルにあるHTMLを表示する xcode内にHTMLを格納して.そのHTMLをWebViewで表示する方法です. // UIWebViewの初期化UI ...

  2. Flink资料(3)-- Flink一般架构和处理模型

    Flink一般架构和处理模型 本文翻译自General Architecture and Process Model ----------------------------------------- ...

  3. centos之jdk安装

    1.环境说明 系统:centos6.7, 2.6.32-573.el6.x86_64; jdk:jdk1.7.0_80 2.下载jdk并上传      下载jdk-7u80-linux-x64.tar ...

  4. 第4章 分治策略 monge阵列

    /* fi表示第i行的最左最小元素的列小标,则有f0<f1<f2<...<fn-1 取数组的偶数行,组成新的子数组,递归求解最左最小元素的列下表,利用偶数项限定奇数项的范围,再 ...

  5. OpenCV学习 6:平滑滤波器 cvSmooth()——2

    原创文章,欢迎转载,转载请注明出处 前面进行了彩色的模糊处理,我们对黑白图片进行同样的平滑处理,看看效果.首先是需要创建黑白图片,我对opencv的各种函数还不是很熟悉,我们可以先用熟悉的创建单通道的 ...

  6. Linux 安装xtrabackup的依赖问题

    问题: 尝试安装xtrabackup rpm -ivh percona-xtrabackup-2.2.11-1.el7.x86_64.rpm 报错 perl(DBD::mysql) 被 percona ...

  7. CSS转载

    原文地址:http://www.cnblogs.com/dolphinX/archive/2012/10/13/2722501.html 页面布局,或者是在页面上做些小效果的时候经常会用到 displ ...

  8. Linux-手动释放缓存(Buffer、Cache)

    /proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段.也就是说可以通过修改/proc中的文件,来对 当前kernel的行为做出调整.那么我们可以通过调整/ ...

  9. Unix/Linux环境C编程入门教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建

    1. openSUSE是一款优秀的linux. 2.选择默认虚拟机 3.选择稍后安装操作系统 4.选择linux  opensuse 5. 选择默认虚拟机名称 6.设置处理器为双核. 7.内存设置为2 ...

  10. python-面向对象(二)

    面向对象总结 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例( ...