文件名:newstart.cpp

输入输出文件:newstart.in、newstart.out

时空:50M,1s
【题目描述】
发展采矿业当然首先得有矿井, 小 FF 花了上次探险获得的千分之一的财富请人在岛
上挖了 n 口矿井, 但他似乎忘记考虑的矿井供电问题……
为了保证电力的供应, 小 FF 想到了两种办法:
1、 在这一口矿井上建立一个发电站, 费用为 v(发电站的输出功率可以供给任
意多个矿井)。
2、 将这口矿井与另外的已经有电力供应的矿井之间建立电网, 费用为 p。
小 FF 希望身为”NewBe_One" 计划首席工程师的你帮他想出一个保证所有矿井电力供
应的最小花费。
【输入格式】
第一行一个整数 n, 表示矿井总数。
第 2~n+1 行,每行一个整数, 第 i 个数 v[i]表示在第 i 口矿井上建立发电站的费用。
接下来为一个 n*n 的矩阵 P, 其中 p[ i , j ]表示在第 i 口矿井和第 j 口矿井之间建立
电网的费用(数据保证有 p[ i, j ] = p[ j, i ], 且 p[ i, i ]=0) 。
【输出格式】
仅一个整数, 表示让所有矿井获得充足电能的最小花费。
【输入样例】
4
5
4
NOIP2010 模拟试题
4
3
0 2 2 2
2 0 3 3
2 3 0 4
2 3 4 0
【输出样例】
9
输出样例说明:
小 FF 可以选择在4号矿井建立发电站然后把所有矿井都与其建立电网,总花费是
3+2+2+2 = 9。
【数据范围】
对于30%的数据:1<=n<=50;
对于100%的数据:1<=n<=300; 0<=v[i], p[i,j] <=10^5.

思路:因为不一定仅仅建立一个发电站,那么就建立一个超级源点,把所有点建立发电站的费用设为到这一点的路径,然后在这张图中跑一边kruskal算法就行了

代码:

#include
using namespace std;
#include
#include
int n;long long sum=0;
int minfdz=999999,t;//t tiao bian
struct Edge{
 int u,v,w;
};
Edge edge[302*302];
int fdz[301],father[301];
int find(int);
void unionn(int,int);
int cmp(const Edge &a,const Edge &b)
{
 return a.w
}
void kruskal();
void input();
int main()
{
 freopen("newstart.in","r",stdin);
 freopen("newstart.out","w",stdout);
 input();
 kruskal();
 cout<<sum<<endl;
 fclose(stdin);
 fclose(stdout);
 return 0;
}
void kruskal()
{
 int k=0;
 for(int i=1;i<=n+1;++i)
 father[i]=i;
 sort(edge+1,edge+t+1,cmp);
 for(int i=1;i<=t;++i)
 {
  int r1=find(edge[i].u);
  int r2=find(edge[i].v);
  if(r1!=r2)
  {
   unionn(r1,r2);
   sum+=edge[i].w;
   k++;
   if(k==n) return;
  }
 }
 
}
void input()
{
 scanf("%d",&n);
 t=0;
 for(int i=1;i<=n;++i)
 {
  scanf("%d",&fdz[i]);
  if(fdz[i]
  minfdz=fdz[i];
  edge[++t].u=n+1;
  edge[t].v=i;
  edge[t].w=fdz[i];
  edge[++t].v=n+1;
  edge[t].u=i;
  edge[t].w=fdz[i];
 }
 for(int i=1;i<=n;++i)
   for(int j=1;j<=n;++j)
   {
    edge[++t].u=i;
    edge[t].v=j;
    scanf("%d",&edge[t].w);
   }
}
int find(int x)
{
 if(father[x]!=x) father[x]=find(father[x]);
 return father[x];
}
void unionn(int a,int b)
{
 father[b]=a;
}

转载于:https://www.cnblogs.com/c1299401227/p/5370753.html

61.新的开始(最小生成树)相关推荐

  1. 拓扑排序 详解 + 并查集 详解 + 最小生成树详解

    若您发现本文有什么错误,请联系我,我会及时改正的,谢谢您的合作! 本文为原创文章,转载请注明出处 本文链接   : http://www.cnblogs.com/Yan-C/p/3943940.htm ...

  2. 数据结构与算法(7-3)最小生成树(普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法)

    目录 一.最小生成树简介 二.普里姆算法(Prim) 1.原理 2.存储 2-1.图顶点和权: 2-3. 最小生成树: 3.Prim()函数 3-1.新顶点入树 3-2.保留最小权 3-3. 找到最小 ...

  3. 最小生成树(MST)介绍及C/C++代码

    文章目录 前言 一.最小生成树是什么? 二.最小生成树的算法 1.Prim算法 2.Kruskal算法 总结 前言   最小生成树也是在路由算法设计中常用到的一种树,其可保证全局的权重和最小.如果权重 ...

  4. #2020.02.05训练题解#最小生成树入门(F题)

    题源CF-1108 CF-1108-MST Unification Description You are given an undirected weighted connected graph w ...

  5. 《程序设计解题策略》——1.2 利用最小生成树及其扩展形式解题

    本节书摘来自华章计算机<程序设计解题策略>一书中的第1章,第1.2节,作者:吴永辉 王建德 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.2 利用最小生成 ...

  6. MPB:微生物所东秀珠组-​​基于16S rRNA基因和基因组序列对细菌物种的初步鉴定...

    为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...

  7. 前端每周清单第 30 期:WebVR 指南,Vue 代码分割范式,理想的 React 架构特性

    前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点:分为新闻热点.开发教程.工程实践.深度阅读.开源项目.巅峰人生等栏目.欢迎关注[前端之巅]微信公众号(ID:front ...

  8. 「日常训练」 Genghis Khan the Conqueror(HDU-4126)

    题意 给定\(n\)个点和\(m\)条无向边(\(n\le 3000\)),需要将这\(n\)个点连通.但是有\(Q\)次(\(Q\le 10^4\))等概率的破坏,每次破坏会把\(m\)条边中的某条 ...

  9. JQuery实现——黑客帝国代码雨效果

    效果如你所见就是本页面上方那样的效果 实现方法来自一个印度小伙纸,学习完我也没总结一下,今儿个补上 如何实现,大家右键查看源码复制即可,不过学习的过程还是要总结总结. 下面通过另外两个小例子,一步一步 ...

最新文章

  1. Hive-1.2.0学习笔记(一)安装配置
  2. Linux(CentOS)安装配置zeromq、jzmq(解决各种问题)
  3. 删除SmartAuditor日记信息报错问题
  4. dabs是什么意思_单词flounder是什么中文意思
  5. 【Hadoop】MapReduce笔记(二):MapReduce容错,任务失败处理
  6. java 输出编码_从代码看java输入输出中的编码和解码
  7. SQLServer书写规范梳理
  8. Cognos值提示设置小技巧
  9. SQL Server 2005:面向信息管理的全新平台
  10. 服务器迁入虚拟主机的好处,服务器迁入虚拟主机的好处
  11. java开发做项目的思路
  12. 怎样设计访谈提纲_如何设计调查问卷与访谈提纲要点分析.ppt
  13. 谷歌 Chrome 浏览器怎样开启黑暗模式?
  14. .net core系列源码地址介绍
  15. foxpro获取html数据类型,FoxPro数据库写入html文件中
  16. Windows10台式机前面板插孔声音和麦克风不可用
  17. 搭建openstack keystone服务创建域报错An unexpected error prevented the server from fulfilling your request. (H
  18. x在计算机中是哪个按键,电脑键盘x号怎么打出来
  19. PyCharm设置中文(官方插件版)
  20. VMware提示【该虚拟机似乎正在使用中】的解决方案

热门文章

  1. 【ES6(2015)】Set
  2. 信息安全工程师笔记-综合知识冲刺(四)
  3. Qt文档阅读笔记-单元测试中构建标准检测程序(CPU、Linux性能、内存泄漏等)
  4. Spring Boot笔记-发送消息给RabbitMQ
  5. 4.2串的表示和实现
  6. Qt creator5.7 OpenCV249之中值滤波(含源码下载)
  7. Linux系统中read的用法,Linux中read命令的用法
  8. native react 常用指令_React Native 常用的 15 个库
  9. 学JAVA要学redis_新手学习Java对Redis简单操作
  10. (软件工程复习核心重点)第一章软件工程概论习题