博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nyoj 引水工程(最小生成树)
阅读量:5745 次
发布时间:2019-06-18

本文共 3481 字,大约阅读时间需要 11 分钟。

描述

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

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

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

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

 
输入
第一行: K 表示有多少组测试数据。
接下来对每组测试数据:
第1行: N 表示有N个区域( 1<=N<=300 )
第2 行: W1 W2 …. WN Wi表示第i个区域自建水库需要的费用
再有N行: Pi1 Pi2 …. Pin Pij表示建立第i个区域与第j个区域引水管道的费用
输出
对于每组测试数据,输出占一行,即建立整个引水工程的最小费用。
样例输入
155 4 4 3 60 2 2 2 22 0 3 3 32 3 0 4 52 3 4 0 12 3 5 1 0
样例输出
10
来源
上传者

 

 

题解:    找到建立水库的最小值,以此建立最小生成树.......蒟蒻啊   ....自己刚开始的思路想错了.....

 

WA代码:

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 using namespace std;13 #define INF 0x3f3f3f3f14 #define MAX 10001015 16 int n,ans,minn;17 int quyu[333],vis[333],dis[333];18 int mp[333][333];19 20 void prim()21 {22 memset(vis,0,sizeof(vis));23 memset(dis,INF,sizeof(dis)); 24 dis[1]=0;25 ans=0;26 dis[0]=INF;27 while(true){28 int m=0;29 for(int i=1; i<=n; i++){30 if(!vis[i] && dis[i]
quyu[i])59 minn=quyu[i];60 }61 for(int i=1; i<=n; i++)62 for(int j=1; j<=n; j++){63 scanf("%d",&mp[i][j]);64 }65 prim();66 printf("%d\n",ans+minn);67 }68 }
View Code

AC代码:

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 #include
10 #include
11 #include
12 using namespace std;13 #define INF 0x3f3f3f3f14 #define MAX 10001015 16 int n,ans,minn;17 int quyu[333],vis[333],dis[333];18 int mp[333][333];19 20 void prim()21 {22 memset(vis,0,sizeof(vis));23 memset(dis,INF,sizeof(dis));24 for(int i=0;i<=n;i++)25 dis[i]=mp[0][i]; 26 ans=0;27 //dis[0]=INF;28 while(true){29 int m=0;30 for(int i=1; i<=n; i++){31 if(!vis[i] && dis[i]

 

别人的克鲁斯卡尔A的:

1 #include 
2 #include
3 #include
4 #define Maxsize 310 5 #define INF 0x3f3f3f3f 6 int n; 7 int p[Maxsize][Maxsize]; 8 int par[Maxsize]; 9 int rank[Maxsize];10 void init()11 {12 memset(p,0x3f,sizeof(p));13 for(int i=0;i<=n;i++)14 {15 par[i]=i;16 rank[i]=0;17 }18 }19 int find(int x)20 {21 if(par[x]==x)22 return x;23 else return par[x]=find(par[x]);24 }25 void unite(int x,int y)26 {27 x=find(x);28 y=find(y);29 if(x==y)30 return;31 if(rank[x]
p[i][j]&&(!same(i,j)))55 {56 min=p[i][j];57 a=i;b=j;58 }59 }60 if(min==INF)61 break;62 // printf("%d\n",min);63 res+=p[a][b];64 unite(a,b);65 }66 return res;67 }68 int main()69 {70 int K;71 int i,j;72 scanf("%d",&K);73 while(K--)74 {75 scanf("%d",&n);76 init();77 for(i=1;i<=n;i++)78 {79 scanf("%d",&p[0][i]);80 p[i][0]=p[0][i];81 }82 for(i=1;i<=n;i++)83 for(j=1;j<=n;j++)84 scanf("%d",&p[i][j]);85 printf("%d\n",FindTree());86 }87 return 0;88 }
View Code

 

转载于:https://www.cnblogs.com/wangmengmeng/p/5331209.html

你可能感兴趣的文章
自动化测试之WatiN(2)
查看>>
关于完成生鲜电商项目后的一点总结
查看>>
noip2012 普及组
查看>>
第二阶段 铁大Facebook——十天冲刺(10)
查看>>
Java判断是否为垃圾_Java GC如何判断对象是否为垃圾
查看>>
多项式前k项和java_多项式朴素贝叶斯softmax改变
查看>>
java数组只能交换0下标和n_编程练习-只用0交换排序数组
查看>>
centos7安装mysql视频教程_centos7安装mysql(完整)
查看>>
php图片赋值,php如何优雅地赋值
查看>>
【探索HTML5第二弹01】HTML5的前世今生以及来世
查看>>
Failed to connect to remote VM. Connection refused. Connection refused: connect
查看>>
freeze
查看>>
JS时间转时间戳,时间戳转时间。时间显示模式。
查看>>
SAP HANA存储过程结果视图调用
查看>>
设计模式 ( 十八 ):State状态模式 -- 行为型
查看>>
OracleLinux安装说明
查看>>
nova分析(7)—— nova-scheduler
查看>>
Entity Framework 实体框架的形成之旅--Code First模式中使用 Fluent API 配置(6)
查看>>
OpenMediaVault 搭建git,ssh无法连接问题
查看>>
java多线程之:Java中的ReentrantLock和synchronized两种锁定机制的对比 (转载)
查看>>