Nyoj 引水工程(最小生成树)
描述
南水北调工程是优化水资源配置、促进区域协调发展的基础性工程,是新中国成立以来投资额最大、涉及面最广的战略性工程,事关中华民族长远发展。“南水北调工程”,旨在缓解中国华北和西北地区水资源短缺的国家战略性工程。就是把中国长江流域丰盈的水资源抽调一部分送到华北和西北地区。我国南涝北旱,南水北调工程通过跨流域的水资源合理配置,促进南北方经济、社会与人口、资源、环境的协调发展。
整个工程分东线、中线、西线三条调水线。东线工程位于东部,因地势低需抽水北送至华北地区。中线工程从汉水与其最大支流丹江交汇处的丹江口水库引水,自流供水给黄淮海平原大部分地区,20多座大中城市;西线工程在青藏高原上,由长江上游向黄河上游补水。
现在有N个区域需要建设水资源工程,它们可以自建水库解决缺水问题,也可以从已有水源的地区建立管道引水过来。当然,这些建设都需要大量投资。
你能不能给出一个优化水资源配置方案,在保证每个区域都能用上水的前提下,使得整个引水工程费用最低。
- 输入
- 第一行: K 表示有多少组测试数据。
接下来对每组测试数据:
第1行: N 表示有N个区域( 1<=N<=300 )
第2 行: W1 W2 …. WN Wi表示第i个区域自建水库需要的费用
再有N行: Pi1 Pi2 …. Pin Pij表示建立第i个区域与第j个区域引水管道的费用 - 输出
- 对于每组测试数据,输出占一行,即建立整个引水工程的最小费用。
- 样例输入
-
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 - 样例输出
-
10
- 来源
- 第八届河南省程序设计大赛
- 上传者
- hnu_acm
题解: 找到建立水库的最小值,以此建立最小生成树.......蒟蒻啊 ....自己刚开始的思路想错了.....
WA代码:
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <string>
#include <cstring>
#include <queue>
using namespace std;
#define INF 0x3f3f3f3f
#define MAX 100010 int n,ans,minn;
int quyu[],vis[],dis[];
int mp[][]; void prim()
{
memset(vis,,sizeof(vis));
memset(dis,INF,sizeof(dis));
dis[]=;
ans=;
dis[]=INF;
while(true){
int m=;
for(int i=; i<=n; i++){
if(!vis[i] && dis[i]<dis[m])
m=i;
}
if(m==)
break;
vis[m]=;
ans+=dis[m];
for(int i=; i<=n; i++)
dis[i]=min(dis[i],mp[m][i]);
}
} void init()
{
memset(mp,INF,sizeof(mp));
memset(quyu,,sizeof(quyu));
minn=INF;
} int main()
{
int t;
scanf("%d",&t);
while(t--){
init();
scanf("%d",&n);
for(int i=; i<n; i++){
scanf("%d",&quyu[i]);
if(minn>quyu[i])
minn=quyu[i];
}
for(int i=; i<=n; i++)
for(int j=; j<=n; j++){
scanf("%d",&mp[i][j]);
}
prim();
printf("%d\n",ans+minn);
}
}
AC代码:
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <string>
#include <cstring>
#include <queue>
using namespace std;
#define INF 0x3f3f3f3f
#define MAX 100010 int n,ans,minn;
int quyu[],vis[],dis[];
int mp[][]; void prim()
{
memset(vis,,sizeof(vis));
memset(dis,INF,sizeof(dis));
for(int i=;i<=n;i++)
dis[i]=mp[][i];
ans=;
//dis[0]=INF;
while(true){
int m=;
for(int i=; i<=n; i++){
if(!vis[i] && dis[i]<dis[m])
m=i;
}
if(m==)
break;
vis[m]=;
ans+=dis[m];
for(int i=; i<=n; i++)
dis[i]=min(dis[i],mp[m][i]);
}
} void init()
{
memset(mp,INF,sizeof(mp));
memset(quyu,,sizeof(quyu));
minn=INF;
} int main()
{
int t;
scanf("%d",&t);
while(t--){
init();
scanf("%d",&n);
for(int i=; i<=n; i++){
scanf("%d",&mp[][i]);
}
for(int i=; i<=n; i++)
for(int j=; j<=n; j++){
scanf("%d",&mp[i][j]);
}
prim();
printf("%d\n",ans);
}
}
别人的克鲁斯卡尔A的:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Maxsize 310
#define INF 0x3f3f3f3f
int n;
int p[Maxsize][Maxsize];
int par[Maxsize];
int rank[Maxsize];
void init()
{
memset(p,0x3f,sizeof(p));
for(int i=;i<=n;i++)
{
par[i]=i;
rank[i]=;
}
}
int find(int x)
{
if(par[x]==x)
return x;
else return par[x]=find(par[x]);
}
void unite(int x,int y)
{
x=find(x);
y=find(y);
if(x==y)
return;
if(rank[x]<rank[y])
par[x]=y;
else
{
par[y]=x;
if(rank[x]==rank[y])
rank[x]++;
}
}
bool same(int x,int y)
{
return find(x)==find(y);
}
int FindTree()
{
int res=;
int a,b;
for(;;)
{
int min=INF;
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
{
if(min>p[i][j]&&(!same(i,j)))
{
min=p[i][j];
a=i;b=j;
}
}
if(min==INF)
break;
// printf("%d\n",min);
res+=p[a][b];
unite(a,b);
}
return res;
}
int main()
{
int K;
int i,j;
scanf("%d",&K);
while(K--)
{
scanf("%d",&n);
init();
for(i=;i<=n;i++)
{
scanf("%d",&p[][i]);
p[i][]=p[][i];
}
for(i=;i<=n;i++)
for(j=;j<=n;j++)
scanf("%d",&p[i][j]);
printf("%d\n",FindTree());
}
return ;
}
Nyoj 引水工程(最小生成树)的更多相关文章
- nyoj 1239——引水工程——————【最小生成树 prim】
引水工程 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描述 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程,是新中国成立以来投资额最大.涉及面最广的战略性工 ...
- POJ-2421Constructing Roads,又是最小生成树,和第八届河南省赛的引水工程惊人的相似,并查集与最小生成树的灵活与能用,水过~~~
Constructing Roads Time Limit: 2000MS Memory Limit: 65536K Description There are N v ...
- zzuoj 10409 10409: D.引水工程
10409: D.引水工程 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 96 Solved: 34[Submit][Status][Web Boar ...
- 第八届河南省赛D.引水工程(kruthcra+prime)
D.引水工程 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 118 Solved: 41 [Submit][Status][Web Board] D ...
- zufe oj 引水工程( 巧妙地把在i建水设为e[0][i])
引水工程 时间限制: 3 Sec 内存限制: 128 MB提交: 11 解决: 6[提交][状态][讨论版] 题目描述 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程,是新中国成立以来 ...
- 河南省第八届ACM省赛---引水工程
引水工程 时间限制:2000 ms | 内存限制:65535 KB 难度: 描述 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程,是新中国成立以来投资额最大.涉及面最广的战略性工程,事 ...
- hdu 1879 继续通畅工程(最小生成树)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1879 /************************************************* ...
- HDU-1232--畅通工程(最小生成树)
Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通 ...
- hdu 1879 继续畅通工程 (最小生成树)
继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
随机推荐
- Eclipse工具的问题
1 Eclipse采用ctrl抄 粘贴很卡 Eclipse -- Windows->Preferences->General->Editors->Text Editors-&g ...
- LayoutInflater使用
在实际工作中,事先写好的布局文件往往不能满足我们的需求,有时会依据情况在代码中自己定义控件,这就须要用到LayoutInflater.LayoutInflater在Android中是“扩展”的意思,作 ...
- Leetcode:minimum_depth_of_binary_tree解决问题的方法
一. 称号 并寻求最深的二元相似.给定的二进制树.求其最小深度. 最小深度是沿从根节点,到叶节点最短的路径. 二. 分析 当我看到这个题目时.我直接将最深二叉树的代码略微改了下,把ma ...
- 查看SQLSERVER内部数据页面的小插件Internals Viewer
原文:查看SQLSERVER内部数据页面的小插件Internals Viewer 查看SQLSERVER内部数据页面的小插件Internals Viewer 感觉internals viewer这个名 ...
- 快速排序:升序+降序----java实现
快速排序思路:先把第一个元素令为low下标,最后一个为high下标.并把第一个元素令为temp来作为标准元素.以标准元素来调整数组,使比标准元素小的都在标准元素前,比标准元素大的都在标准元素后.这样一 ...
- poj 3237 Tree(树链拆分)
题目链接:poj 3237 Tree 题目大意:给定一棵树,三种操作: CHANGE i v:将i节点权值变为v NEGATE a b:将ab路径上全部节点的权值变为相反数 QUERY a b:查询a ...
- 用友财务总帐(GL)模BI数据ETL分析
业务需求,如下面的: 现在用友总帐一家公司BI分析案例. /* Sql Server2012使用作业设置定时任务,为了保证有一天运行时间 */ /* 意temp1表里一定要保证要有记录,否则以temp ...
- Excel一项研究指出色彩
Excel一项研究指出色彩 从Office2007跳到了2013版本号,尽管有着种种不适,但应该承认Excel2013版本号在图表和色彩上更加人性化和"专业"了一些. 但假设须要更 ...
- .NET 4 并行(多核)编程系列之二 从Task开始
原文:.NET 4 并行(多核)编程系列之二 从Task开始 .NET 4 并行(多核)编程系列之二 从Task开始 前言:我们一步步的从简单的开始讲述,还是沿用我一直的方式:慢慢演化,步步为营. ...
- ruby简单的基本 3
类 Ruby一切都是对象,它包含了一个恒定.例如,可以使用.class物业查看对象的类型,你可以看一下1.class.你会发现常1类型是Fixnum,1但它是Fixnum的一个例子. Ruby本类cl ...