LOJ #10066. 「一本通 3.1 练习 1」新的开始(最小生成树 虚拟节点)

2023-05-16

题目链接
题目描述
发展采矿业当然首先得有矿井,小 FF 花了上次探险获得的千分之一的财富请人在岛上挖了 n口矿井,但他似乎忘记考虑的矿井供电问题……

为了保证电力的供应,小 FF 想到了两种办法:

在这一口矿井上建立一个发电站,费用为 v(发电站的输出功率可以供给任意多个矿井)。
将这口矿井与另外的已经有电力供应的矿井之间建立电网,费用为p 。
小 FF 希望身为「NewBe_One」计划首席工程师的你帮他想出一个保证所有矿井电力供应的最小花费。
输入格式
第一行一个整数n ,表示矿井总数。(1<=n<=300)

第 2-n+1行,每行一个整数,第 i个数 vi表示在第 i口矿井上建立发电站的费用。

接下来为一个 n*n的矩阵p,其中 pi,j表示在第 i口矿井和第 j口矿井之间建立电网的费用(数据保证有pi,j=pj,i,且pi,i=0)。(0<=vi,pi,j<=10^5)
输出格式
输出仅一个整数,表示让所有矿井获得充足电能的最小花费。
样例
输入

4
5
4
4
3
0 2 2 2
2 0 3 3
2 3 0 4
2 3 4 0
输出
9

这道题最主要的问题就是在哪些节点建立发电站,按照常规的想法很难想出答案,需要用一个很神奇的方法就是建立虚拟节点,也就是除了1-n个矿井之外,另建一个虚拟节点为0,每个矿井与0点相连的费用就是在它上面建立发电站的费用vi,为什么这样可以呢?
对于每个点来说,只要有电就可以了,无所谓是和0点连还是和别的已经与0点连通的点相连,而0这个电源只要能和任意至少一个点连通就可以了。所以把每个点建立电源的花费转换成到0点的花费,这样就变成了0-n这些点的最小生成树问题了。

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
int n,G[305][305],D[305],visit[305],ans;
void Prim(int a){
	int i,j,minn,t;
	for(i=0;i<=n;i++) D[i]=INF;
	D[a]=0;
	ans=0;
	for(i=0;i<=n;i++){
		minn=INF;
		for(j=0;j<=n;j++){
			if(visit[j]==0&&D[j]<minn){
				minn=D[j];
				t=j;
			}
		}
		visit[t]=1;
		ans+=D[t];
		for(j=0;j<=n;j++){
			if(visit[j]==0&&D[j]>G[t][j]) D[j]=G[t][j]; //注意和Dijkstra区分,这里是找没有访问过的节点,更新它到已访问过节点集的距离,而不是找它到源点的最短距离
		}
	}
}
int main(){
	int i,j;
	cin>>n;
	for(i=1;i<=n;i++){
		int w;
		cin>>w;
		G[0][i]=w;
		G[i][0]=w;
	}
	for(i=1;i<=n;i++){
		for(j=1;j<=n;j++){
			int w;
			cin>>w;
			G[i][j]=w;
		}
	}
	Prim(0);
	cout<<ans<<endl;
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LOJ #10066. 「一本通 3.1 练习 1」新的开始(最小生成树 虚拟节点) 的相关文章

  • 最小生成树 Kruskal算法 Prim算法 洛谷P3366

    最小生成树 Kruskal算法 Prim算法 洛谷P3366 相较于Prim算法 xff0c 我觉得Kruskal算法更优 xff08 因为一般情况 xff0c 题目给你的边数都是正常的 xff0c Kruskal算法的时间复杂度为O El
  • 洛谷 P3366 【模板】最小生成树

    洛谷 P3366 模板 最小生成树 题目 给出一个无向图 xff0c 求出最小生成树 xff0c 如果该图不连通 xff0c 则输出orz 题目链接 模板 最小生成树 洛谷 输入 第一行包含两个整数N M xff0c 表示该图共有N个结点和
  • 最小生成树 prim算法(附代码)

    prim算法是以一个根节点开始慢慢往下延伸 xff0c 不断寻找距生成树最短的距离的节点 xff0c 然后将该节点纳入生成树的集合中 xff0c 然后再将该节点影响的其他未纳入生成树节点的距离更新 xff08 缩小与生成树的距离 xff09
  • 最小生成树+思维 扩散(洛谷 P1661)

    扩散 题目描述 一个点每过一个单位时间就会向四个方向扩散一个距离 xff0c 如图 图略 两个点a b连通 xff0c 记作e a b 当且仅当a b的扩散区域有公共部分 连通块的定义是块内的任意两个点u v都必定存在路径e u a0 e
  • 洛谷 P3366 【模板】最小生成树 (题解+代码)

    题目传送门 xff1a https www luogu com cn problem P3366 题解 xff1a 利用Kruskal算法求解 xff0c 这里大致说下Kruskal算法 对于一个点数为n的生成树而言 很显然 xff0c 想
  • 1488 新的开始

    1488 新的开始 新的开始 保证最少的花费 xff0c 那么很明显这就是一个最小生成树了 做题之前盲猜一下 xff0c 这个题应该要跑两遍最小生成树 xff0c 因为他说了使用两种情况 xff0c p和v 在井上修建一个和在各个井中间修建
  • LOJ #10066. 「一本通 3.1 练习 1」新的开始(最小生成树 虚拟节点)

    题目链接 题目描述 发展采矿业当然首先得有矿井 xff0c 小 FF 花了上次探险获得的千分之一的财富请人在岛上挖了 n口矿井 xff0c 但他似乎忘记考虑的矿井供电问题 为了保证电力的供应 xff0c 小 FF 想到了两种办法 xff1a
  • 1488:新的开始

    题目描述 发展采矿业当然首先得有矿井 xff0c 小 FF 花了上次探险获得的千分之一的财富请人在岛上挖了 n 口矿井 xff0c 但他似乎忘记考虑的矿井供电问题 为了保证电力的供应 xff0c 小 FF 想到了两种办法 xff1a 在这一
  • 【洛谷 3366】最小生成树_Prim

    题目描述 如题 xff0c 给出一个无向图 xff0c 求出最小生成树 xff0c 如果该图不连通 xff0c 则输出orz 输入格式 第一行包含两个整数N M xff0c 表示该图共有N个结点和M条无向边 xff08 N lt 61 50
  • 20190708新的开始

    题目描述 发展采矿业当然首先得有矿井 xff0c 小 FF 花了上次探险获得的千分之一的财富请人在岛上挖了 n 口矿井 xff0c 但他似乎忘记考虑的矿井供电问题 为了保证电力的供应 xff0c 小 FF 想到了两种办法 xff1a 在这一
  • 洛谷-U132410-最小代价(最小生成树(森林)+ 虚拟点)

    题目描述 xff1a 点击进入 思路 最小生成树的变形 我们虚拟一个 零 结点 xff0c 这个结点跟每个村庄 i 连边 xff0c 权值分别为在村庄 i 建立一个网络中心的花费 然后其他边都正常连 xff0c 最后求最小生成树即可 代码
  • P3366 【模板】最小生成树 java prim算法 洛谷

    传送门 P3366 模板 最小生成树 洛谷 计算机科学教育新生态 luogu com cn https www luogu com cn problem P3366 这道题有两种常规做法 xff0c kruskal 对边进行研究 和 pri
  • 洛谷 P3366 【模板】最小生成树

    题目描述 如题 xff0c 给出一个无向图 xff0c 求出最小生成树 xff0c 如果该图不连通 xff0c 则输出orz 输入输出格式 输入格式 xff1a 第一行包含两个整数N M xff0c 表示该图共有N个结点和M条无向边 xff
  • 新的开始( [USACO08OCT]打井Watering Hole)

    新的开始 newstart pas c cpp 题目描述 话说小 FF 在经历了上次 寻找古代王族遗产 的探险后 xff0c 成为了世界上最伟大的探险 家并拥有了一大笔财富 当然他不能坐吃山空 xff0c 必须创造财富 xff01 xff0
  • 数据结构:最小生成树--Prim算法

    最小生成树 Prim算法 最小生成树 给定一无向带权图 顶点数是n 要使图连通只需n 1条边 若这n 1条边的权值和最小 则称有这n个顶点和n 1条边构成了图的最小生成树 minimum cost spanning tree Prim算法
  • 最小生成树之普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法

    作者 STzen 链接 https www jianshu com p 683ffde4f3a3 来源 简书 最小生成树 列子引入 如图假设v0到v8表示9个村庄 现在需要在这9个村庄假设通信网络 村庄之间的数字代表村庄之间的直线距离 求用
  • 最小生成树笔记(Prim算法&&Kruskal算法)

    1 最小生成树 最小生成树 Minimum Spanning Tree 简称MST 是指 在一个连通无向图中 找到一个包含所有顶点的树 且该树的所有边的权重之和最小 换句话说 最小生成树是原图中的一个子图 它包含所有顶点 并且连接所有顶点的
  • tree【WQS二分+MST】

    题目链接 洛谷 精确涉及到了WQS二分 BZOJ 2654 不推荐 个人不推荐做BZOJ2654的这道题 因为那道题可以水过去 不用WQS二分也是可以的 可以直接二分答案 显然是没有这个好的 先在这里讲一下什么是WQS二分吧 也是从网上看来
  • 数据结构——普里姆(Prim)算法

    普里姆算法 Prim算法 图论中的一种算法 可在加权连通图里搜索最小生成树 意即由此算法搜索到的边子集所构成的树中 不但包括了连通图里的所有顶点 且其所有边的权值之和亦为最小 以下是数据结构中关于普里姆算法的操作 编程风格参考严蔚敏版数据结
  • prim算法解决最小生成树问题

    刚好这次又遇到了prim算法 就做了下整理 可以参考 数据结构与算法分析c 描述 这本书 个人而言 很经典 并把以前写的代码也整理了一下 做下分享 同时也加深下自己的理解 prim算法是解决最小生成树问题的一个很好的算法 此算法是是将点集合

随机推荐

  • 《科研方法导论》

    科研方法导论 这本书在开学的时候听说有这门课要上就在网上下单了 xff0c 目前已将近一整个学期过去了 xff0c 距离老师的最后一次课也有好几个月了 xff0c 才新建一份Word文档准备将老师上课所讲述的知识和这本书的整体内容进行读后感
  • 语义计算的递归下降(预测)翻译程序

    语义计算的递归下降 xff08 预测 xff09 翻译程序 一 实验内容 实现属性文法的递归下降翻译程序 xff27 xff3b xff2e xff3d xff1a N gt S S f 61 1 print S v S gt BS1 S1
  • MyDockFinder Steam版的新增功能和下载

    文末附下载链接 1 增加两个新的开机启动方式 xff0c 分别是注册表和计划任务 xff0c 防止开机不能启动问题 xff0c 下面解释一下三种开机启动方式的区别和功能 注册表 xff1a 速度最慢 但是启动稳定几乎没有开机不能启动的情况
  • Mysql报错:Your password has expired. To log in

    https stackoverflow com questions 33387879 mysql password expired cant connect MySQL password expiry Resetting the passw
  • go语言string、int、int64互相转换

    string到int int err 61 strconv Atoi string string到int64 int64 err 61 strconv ParseInt string 10 64 int到string string 61 s
  • 直播解决方案/sdk的选择

    直播App xff1a 趣拍微视频云服务 七牛云 金山云 乐视云 网易云信 VTC云通信 gensee zego im Tusdk 大牛直播 美丽播 云豹直播 易直播 一直播 微议 2B指的是为企业提供直播服务 例如微吼 目睹直播 易直播
  • vue示例及优秀案例

    完整的示例 xff1a https auth0 com blog build an app with vuejs 非常棒的概览 xff1a https scotch io tutorials build a single page time
  • [微信开发]invalid credential, access_token is invalid or not latest hint

    正解 这种情况跟这个库没有直接关系 请检查一下是否有别的地方同时请求了access token xff0c 导致微信服务器发放了新的access token给别人 尤其是dev环境 正解 查了好久 xff0c 先发现下载到本地的文件size
  • vmware7.1汉化中文版下载地址+序列号!

    http hi baidu com aking roc blog item 54e81f5977780e8c810a1825 html vmware7 1汉化中文版序列号 43 注册机下载 vmware7 1汉化中文版序列号 43 注册机下
  • android编译错误FCM

    android编译报错 ed vendor manifest xml 34 Error The following instances are in the device manifest but not specified in fram
  • C++“读取位置 0x****** 时发生访问冲突”的可能原因

    这种错误的意思一般是指访问了不属于自己的内存空间 xff0c 出现这种错误有几种原因 xff1a 1 给一个数组分配了比较小的内存空间 xff0c 然后又给该数组赋了一个比较大的值 xff0c 举例说明 xff1a Cpp代码 char b
  • Ubuntu中SVN客户端安装+使用

    1 安装 svn客户端 xff1a apt get install subversion xff0c 然后根据提示一步一步 xff0c 就完成了 svn的安装 当然 xff0c 也可以源码安装 svn xff0c 下载 subversion
  • 转--如何解决connection reset by peer(参考使用)

    转 如何解决connection reset by peer xff08 参考使用 xff09 2010 04 28 19 33 录制c s结构下的winsocket通信 xff0c 在vuser ini中创建连接 xff08 lrs cr
  • <ubuntu 无线网络已禁用 wireless is disabled>解决办法

    2012 5 23 问题描述 xff1a 无线开关怎么开关都启动不了 xff0c 显示无线网络已禁用 有线ok 激活系统 gt 附加驱动 gt Broadcom STA 无线驱动 xff08 和Nvidia图形加速驱动一起 xff09 即可
  • golang map并发读写

    对应报错 xff1a fatal error concurrent map writes fatal error concurrent map read and map write https wrfly kfd me posts read
  • /run/udev/data 磁盘满

    临时办法 xff1a https groups google com forum m topic nomad tool 6L6QbL6QzY4 I 39 ve run 39 udevadm info cleanup db 39 which
  • 证件照蓝底变白底的方法

    P一寸照片时研究的这个方法 比抠图简单 xff0c 对头发的处理还比较好 的一种方法 xff0c 所以拿出来和大家分享一下
  • 洛谷P3366 【模板】最小生成树.Prim算法

    题目 xff1a https www luogu com cn problem P3366 普利姆算法 xff1a 每次选 与已选的点相连的 最小边 循环n 1次 C语言 xff1a include lt stdio h gt includ
  • Jlink V8 在 Keil MDK5.25 中无法正常烧写、调试程序的故障处理

    最 近我兄弟 xff08 亲弟弟 xff09 把我的某宝Jlink V9 拿去用了 没办法自己也得用啊 xff0c 所以把几年前买的Jlink V8翻出来用 xff08 也是某宝出品 xff09 xff0c 结果 没法正常调试 虽然Jlin
  • LOJ #10066. 「一本通 3.1 练习 1」新的开始(最小生成树 虚拟节点)

    题目链接 题目描述 发展采矿业当然首先得有矿井 xff0c 小 FF 花了上次探险获得的千分之一的财富请人在岛上挖了 n口矿井 xff0c 但他似乎忘记考虑的矿井供电问题 为了保证电力的供应 xff0c 小 FF 想到了两种办法 xff1a