61.新的开始(最小生成树)
文件名: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.新的开始(最小生成树)相关推荐
- 拓扑排序 详解 + 并查集 详解 + 最小生成树详解
若您发现本文有什么错误,请联系我,我会及时改正的,谢谢您的合作! 本文为原创文章,转载请注明出处 本文链接 : http://www.cnblogs.com/Yan-C/p/3943940.htm ...
- 数据结构与算法(7-3)最小生成树(普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法)
目录 一.最小生成树简介 二.普里姆算法(Prim) 1.原理 2.存储 2-1.图顶点和权: 2-3. 最小生成树: 3.Prim()函数 3-1.新顶点入树 3-2.保留最小权 3-3. 找到最小 ...
- 最小生成树(MST)介绍及C/C++代码
文章目录 前言 一.最小生成树是什么? 二.最小生成树的算法 1.Prim算法 2.Kruskal算法 总结 前言 最小生成树也是在路由算法设计中常用到的一种树,其可保证全局的权重和最小.如果权重 ...
- #2020.02.05训练题解#最小生成树入门(F题)
题源CF-1108 CF-1108-MST Unification Description You are given an undirected weighted connected graph w ...
- 《程序设计解题策略》——1.2 利用最小生成树及其扩展形式解题
本节书摘来自华章计算机<程序设计解题策略>一书中的第1章,第1.2节,作者:吴永辉 王建德 更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.2 利用最小生成 ...
- MPB:微生物所东秀珠组-基于16S rRNA基因和基因组序列对细菌物种的初步鉴定...
为进一步提高<微生物组实验手册>稿件质量,本项目新增大众评审环节.文章在通过同行评审后,采用公众号推送方式分享全文,任何人均可在线提交修改意见.公众号格式显示略有问题,建议电脑端点击文末阅 ...
- 前端每周清单第 30 期:WebVR 指南,Vue 代码分割范式,理想的 React 架构特性
前端每周清单专注前端领域内容,以对外文资料的搜集为主,帮助开发者了解一周前端热点:分为新闻热点.开发教程.工程实践.深度阅读.开源项目.巅峰人生等栏目.欢迎关注[前端之巅]微信公众号(ID:front ...
- 「日常训练」 Genghis Khan the Conqueror(HDU-4126)
题意 给定\(n\)个点和\(m\)条无向边(\(n\le 3000\)),需要将这\(n\)个点连通.但是有\(Q\)次(\(Q\le 10^4\))等概率的破坏,每次破坏会把\(m\)条边中的某条 ...
- JQuery实现——黑客帝国代码雨效果
效果如你所见就是本页面上方那样的效果 实现方法来自一个印度小伙纸,学习完我也没总结一下,今儿个补上 如何实现,大家右键查看源码复制即可,不过学习的过程还是要总结总结. 下面通过另外两个小例子,一步一步 ...
最新文章
- Hive-1.2.0学习笔记(一)安装配置
- Linux(CentOS)安装配置zeromq、jzmq(解决各种问题)
- 删除SmartAuditor日记信息报错问题
- dabs是什么意思_单词flounder是什么中文意思
- 【Hadoop】MapReduce笔记(二):MapReduce容错,任务失败处理
- java 输出编码_从代码看java输入输出中的编码和解码
- SQLServer书写规范梳理
- Cognos值提示设置小技巧
- SQL Server 2005:面向信息管理的全新平台
- 服务器迁入虚拟主机的好处,服务器迁入虚拟主机的好处
- java开发做项目的思路
- 怎样设计访谈提纲_如何设计调查问卷与访谈提纲要点分析.ppt
- 谷歌 Chrome 浏览器怎样开启黑暗模式?
- .net core系列源码地址介绍
- foxpro获取html数据类型,FoxPro数据库写入html文件中
- Windows10台式机前面板插孔声音和麦克风不可用
- 搭建openstack keystone服务创建域报错An unexpected error prevented the server from fulfilling your request. (H
- x在计算机中是哪个按键,电脑键盘x号怎么打出来
- PyCharm设置中文(官方插件版)
- VMware提示【该虚拟机似乎正在使用中】的解决方案
热门文章
- 【ES6(2015)】Set
- 信息安全工程师笔记-综合知识冲刺(四)
- Qt文档阅读笔记-单元测试中构建标准检测程序(CPU、Linux性能、内存泄漏等)
- Spring Boot笔记-发送消息给RabbitMQ
- 4.2串的表示和实现
- Qt creator5.7 OpenCV249之中值滤波(含源码下载)
- Linux系统中read的用法,Linux中read命令的用法
- native react 常用指令_React Native 常用的 15 个库
- 学JAVA要学redis_新手学习Java对Redis简单操作
- (软件工程复习核心重点)第一章软件工程概论习题