最小生成树
Ray.C.L
不开longlong见祖宗
展开
-
次小生成树(LCA+库鲁斯卡尔)
思路:严格次小生成树,和最小生成树只有一条边他是不同的,那么利用这一点去写,我们先做最小生成树,然后把最小生成树用到的边建无向图,我们用d1[i][j]表示i点向上跳跃2j2^j2j个点的最大边权,d2同理表示次大边权,那么次小生成树肯定是用之前没有用的边去替换这里的最大边权或最小边权构成的,我们要替换旧边时,就是替换掉lca(a,b)中的d1,d2中的一个边。代码:#pragma GCC optimize(2)#include<bits/stdc++.h> using namesp.原创 2021-02-19 11:58:13 · 292 阅读 · 0 评论 -
秘密的牛奶运输(最小生成树)
思路:题意要求严格次小生成树那么我们看次小生成树怎么求。第一步这里打错了一个是求次小生成树。这里我们不但要求任意连点间边权最大值还要求次大值,因为当最大树边和当前枚举的非树边长度相同时,就不能替换了,但此时却可以替换长度次大的树边。因此还需同时预处理出长度次大的树边。代码:#pragma GCC optimize(2)#include<bits/stdc++.h> using namespace std;typedef long long ll;#define SIS std.原创 2021-02-06 21:50:44 · 367 阅读 · 0 评论 -
走廊的泼水节(最小生成树)
思路:要我们加成完全图并且不影响原图最小生成树唯一,那么我们加的边权值就不能是最小生成树中边权w,要最小那就是w+1,因为要加成完全图,那么我们多个size[i]数组表示i节点所在连通块的点个数是多少,要练成2个连通块变成完全图需要size[i]*size[j]条边,我们再做最小生成树时,本来原图就有一条边将2个连通块连起来就是size[i]*size[j]-1条边。代码:#pragma GCC optimize(2)#include<bits/stdc++.h> using nam.原创 2021-02-05 18:40:23 · 121 阅读 · 0 评论 -
北极通讯网络(最小生成树)
思路:题意抽象出来就是,找到一个最小边权值为d,删除大于d的边,使得剩下的联通块的个数不大于k个。这个题我们可以发现d越大连通块越少,d与连通块个数成单调函数。那么可以二分d,然后dfs/bfs求联通块个数判断,这里呢不用这种做法,我们发现,我们按边去从小到大枚举,不断去连接边组成连通块,然后看连通块个数是否到k个,这不就是克鲁斯卡尔求最小生成树,中间多一个判断k,初始化时,n个点就是n个连通块,然后没连一条边构成新连通块时就在原有基础少一个连通块。代码:#pragma GCC optimize(2.原创 2021-02-04 15:38:02 · 256 阅读 · 0 评论 -
连接格点(最小生成树)
思路:对于给出坐标的点,作为必选边,然后将其他横向和纵向边建图,跑最小生成树,这个建图稍微麻烦些,先枚举2个方向,0代表纵向,1表示横向,然后再连接上下左右四个方向,判断此时与方向的关系从而建边。代码:#pragma GCC optimize(2)#include<bits/stdc++.h> using namespace std;typedef long long ll;#define SIS std::ios::sync_with_stdio(false)#define .原创 2021-02-04 12:09:30 · 465 阅读 · 0 评论 -
联络员(最小生成树)
思路:题目要求有一部分边必须有,然后在可选边中选出最小的边使图联通,那么我们对于必选的边,吧哪些边看成一个点,可选边作为这些点的无向边做最小生成树,用克鲁斯卡尔中并查集可以直接把必选边当初同1个点,那么只需要对后面的可选边做克鲁斯卡尔就行了。代码:#pragma GCC optimize(2)#include<bits/stdc++.h> using namespace std;typedef long long ll;#define SIS std::ios::sync_wit.原创 2021-02-03 16:48:43 · 257 阅读 · 0 评论 -
局域网(最小生成树)
思路:题目要我们再多个连通块中取出一些边,使得其不影响连通性且取出的边和最大,那么我们反着想就是要原图保持联通的情况下边权最小的图,这就是最小生成树。这个题用克鲁斯卡尔比较好。代码:#pragma GCC optimize(2)#include<bits/stdc++.h> using namespace std;typedef long long ll;#define SIS std::ios::sync_with_stdio(false)#define space putc.原创 2021-02-02 22:50:26 · 384 阅读 · 0 评论 -
新的开始(最小生成树,建立超级源点)
思路:如果去掉选择一个点建立发电站,那么答案直接就是个最小生成树,我们要在最小生成树的基础上选一个地方建立发电站,那么可以看成从一个超级源点出发到每个点的花费就是建立发电站的费用,然后算从超级源点出发的最小生成树//#pragma GCC optimize(2)#include<bits/stdc++.h> using namespace std;typedef long long ll;#define SIS std::ios::sync_with_stdio(false)#d.原创 2020-11-11 20:07:07 · 414 阅读 · 0 评论 -
Forsaken喜欢独一无二的树(唯一最小生成树)
思路:根据克鲁斯卡尔算法,出现最小生成树不唯一的情况就是合并2个集合时的边权有相同的情况,那么我们每次取到边权相同的遍历,当他们可能构成最小生成树时加入ans中,然后在遍历一遍这时,我们要剔除构成统一集合边权相同的情况,那么每次我们遍历发现他可能构成最小生成树时我们从ans中减去并吧他们所在的集合合并,当我们发现2个点所在的集合相同时这说明他们就是要删除的边。#include <cstdio>#include <cstring>#include <algorithm&g.原创 2020-07-19 11:11:02 · 353 阅读 · 0 评论 -
挖沟(最小生成树)
思路:克鲁斯卡尔#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>#include<vector>#include<queue>//#include<bits/stdc++.h>using namespace std;typedef long long ll;#def.原创 2020-07-17 14:46:17 · 202 阅读 · 0 评论 -
【HNOI2006】公路修建(二分+最小生成树)
思路:最大值最小首先想到二分,二分他花费最大公路的路费,这条路必定在一级公路上,然后通过克鲁斯卡尔判断是否能构成最小生成树。#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>#include<bits/stdc++.h>using namespace std;typedef long long ..原创 2020-06-23 14:03:38 · 177 阅读 · 0 评论 -
AcWing 859(Kruskal算法求最小生成树)
思路:克鲁斯卡尔模板#include <cstdio>#include <cstring>#include <algorithm>#include <set>#include<iostream>#include<bits/stdc++.h>using namespace std;typedef long long ll;#define SIS std::ios::sync_with_stdio(false)#de..原创 2020-06-23 11:01:19 · 208 阅读 · 0 评论 -
Jungle Roads HDU - 1301
题意:给N给顶点接下来N-1行先输入一给字母和他能到达的字母个数NUM接下来输入的NUM组可到达的字母和花费求最小生成树#include <iostream>#include <cstdio>#include <fstream>#include <algorithm>#include <cmath>#include <...原创 2019-09-22 16:53:53 · 149 阅读 · 0 评论 -
畅通工程再续 HDU - 1875
给出N给顶点的坐标,计算每个顶点间的距离建图,判断一下是否能全部建桥#include <iostream>#include <cstdio>#include <fstream>#include <algorithm>#include <cmath>#include <deque>#include <ve...原创 2019-09-22 11:47:03 · 169 阅读 · 0 评论 -
The Unique MST POJ - 1679
题意找唯一的最小生成树只有一种输出权值和不然就NOT思路prim找次小生成树模板#include<cmath>#include<stack>#include<queue>#include<string>#include<vector>#include<cstdio>#include<cstdlib&g...原创 2019-09-13 21:15:09 · 128 阅读 · 0 评论 -
Borg Maze POJ - 3026(需要多看)
题意求S到A吧A全吃了要最少多少步思路先BFS每个A-S S-A的距离简图求最小生成树(我特么BFSyy写成了xx看了一个小时没发现菜的真实,特么这个东西搞了我3个小时我还是退群吧)#include <algorithm> #include <iostream> #include <cstring> #include <iomani...原创 2019-09-13 12:30:56 · 142 阅读 · 0 评论 -
Agri-Net POJ - 1258(最小生成树问题prim算法)
emmmm。。题意给n个村子连光纤如何全连起来且用的光纤最少,典型的最短路模板题数据范围也小不用优化(结果还是忘记多实例初始化WA了两发Orz)#include <iostream>#include <cstdio>#include <fstream>#include <algorithm>#include <cmath>#i...原创 2019-08-03 17:09:44 · 356 阅读 · 0 评论