随笔分类 - 基础算法—— MST
摘要:个人认为这周题中较难的一道。 题意大概为:给定一张N个点M条边的无向图,求出无向图的一棵最小生成树,满足一号节点的度数不超过给定的整数K。保证 N <= 20 首先用map存取节点,之后抛去1号节点,求每一个联通分量的MST,就得到了一个局部最优解,设p为联通块的个数,接下来从每一个联通分量中找一个
阅读全文
摘要:给定一棵n个点的图上的最小生成树,让你把它补成完全图,使得新图的MST还是给定的MST且边权和最小,输出需要增加的边权和。 设size[i]表示以i号为祖先的并查集的大小。 首先按边权排序,之后在做MST的过程中,答案cnt+=(size[v]*size[u]-1)*(w+1),来解释一下这个式子,
阅读全文
摘要:新建一个虚拟节点后直接跑最小生成树即可,从虚拟节点往每个节点连的边权为每个点建发电站的代价,许多人的考场贪心策略是:先构建原图的最小生成树后找一个花费最小的地方建发电厂。但是这样做不对的地方在于:如果每个地方的点权很小但是一些边的边权十分大,就不如多建几个发电厂核算,因此新建虚拟节点就是考虑到了这种
阅读全文
摘要:这题主要考察对“卫星电话”的理解,k个卫星电话相当于可以让k个联通块保持联通,因此我们只需要让原图连成k个联通块,然后给每个联通块的任意一个节点发一部卫星电话即可。因此我们需要连n-k条边,特别地,当k=0时只需要连n-1条边 一定要好好读题!!!题目要求求边权的最大值,毒瘤样例求最大值,最小值,边
阅读全文
摘要:题目传送门 黄色的MST板子,真香~~~直接累加所有边权之后跑一边Kruskal,减掉MST重量即可 参考代码如下: 1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 struct node 5 { 6 int u
阅读全文
摘要:题目传送门 晚上闲游洛谷,偶然发现这道绿色的MST板子 首先,毫无疑问,这是一道MST的题,而重点在与这句话:“请求出农民John 需要为使所有农场都与有水的农场相连或拥有水井所需要的钱数。” 需要让所有地方都有水,但是这些农场最开始是没水的,我们需要加入一个“水源”节点,而0号节点一般在MST板子
阅读全文
摘要:题面传送门 解析: 本题十分简单,我认为不应该是一道绿题,只需要建一个完全图,然后在建边之前判断是否大于c即可。然后跑一边最小生成树,Kruskal,如果可以的话输出重量,否则输出-1即可。参考程序如下: 1 #include<iostream> 2 #include<algorithm> 3 us
阅读全文
摘要:题目描述 国防部计划用无线网络连接若干个边防哨所。2 种不同的通讯技术用来搭建无线网络; 每个边防哨所都要配备无线电收发器;有一些哨所还可以增配卫星电话。 任意两个配备了一条卫星电话线路的哨所(两边都ᤕ有卫星电话)均可以通话,无论他们相距多远。而只通过无线电收发器通话的哨所之间的距离不能超过 D,这
阅读全文