BZOJ3732 (Kruskal重构树)】的更多相关文章

今天学了Kruskal重构树,似乎很有意思的样子~ 先看题面: BZOJ 题目大意:$n$ 个点 $m$ 条无向边的图,$k$ 个询问,每次询问从 $u$ 到 $v$ 的所有路径中,最长的边的最小值. $1\leq n\leq 15000,1\leq m\leq 30000,1\leq k\leq 20000$. 我相信你们看见这题的想法和我一样: 货车运输!最小生成树上LCA一下就行了!时间复杂度 $O(m\log m+n\log n+k\log n)$.(这里LCA用倍增.树链剖分复杂度是多…
题意 Link 给出一张$n$个点的无向图,每次询问两点之间边权最大值最小的路径 $n \leqslant 15000, m \leqslant 30000, k \leqslant 20000$ Sol 很显然答案一定在最小生成树上,但是此题还有一个更为玄学的做法—Kruskal重构树 它是在Kruskal算法上改进而来的. 算法流程: 对于此题来说,将边权从小到大排序 用并查集维护两点的联通性,若祖先不相同,那么新建一个节点,权值为边权.左右儿子分别为两个点 这样建出来的树,我们称之为Kru…
Kruskal重构树的模板题. 给你N个点的无向图 (1 <= N <= 15,000),记为:1-N.图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_j ( 1 < = d_j < = 1,000,000,000). 现在有 K个询问 (1 < = K < = 20,000).每个询问的格式是:A B,表示询问从A点走到B点的所有路径中,最长的边最小值是多少? 1 #include<bits/stdc++.h> 2…
kruskal重构树 kruskal重构树,顾名思义,是在kruskal的时候顺便搞出来的一棵重构树,具体地说是一个堆. 先说说这个东西是怎么搞出来的吧:默认事先把边按边权从小到大排序,在kruskal的时候,如果当前加入的边连接的两个点\(x\)和\(y\)不在同一个连通块中,就新建一个节点作为\(x\)和\(y\)所在树的根节点的父亲,令这个节点的权值为这条边的权值,还有一般kruskal也要做的把并查集合并:在同一个连通块中就不管. 从模板题看看重构树的性质:BZOJ3732 Networ…
[算法模板]Kruskal重构树 kruskal重构树是一个很常用的图论算法.主要用于解决u->v所有路径上最长边的最小值,就是找到\(u->v\)的一条路径,使路径上的最长边最小. 图片来自Kruskal重构树学习笔记+BZOJ3732 Network 从上图我们可以看出,kruskal重构树有以下特质: 每个原图上的节点一一对应重构树上的叶子节点. 重构树上每一个其他节点(正方形)代表原图上的一个边,有点权. 重构树是一棵二叉树. 重构树是一个二叉堆.(所以两个叶子节点的LCA即为路径上的…
kruskal重构树 Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1-N. 图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_j ( 1 < = d_j < = 1,000,000,000). 现在有 K个询问 (1 < = K < = 15,000). 每个询问的格式是:A B,表示询问从A点走到B点的所有路径中,最长的边最小值是多少? Input 第一行: N, M, K. 第2..…
Kruskal重构树裸题, Sunshine互测的A题就是Kruskal重构树,我通过互测了解到了这个神奇的东西... 理解起来应该没什么难度吧,但是我的Peaks连WA,,, 省选估计要滚粗了TwT #include<cstdio> #include<cstring> #include<algorithm> #define for1(i,a,n) for(int i=(a);i<=(n);i++) #define for2(i,a,n) for(int i=(a…
3545: [ONTAK2010]Peaks Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1202  Solved: 321[Submit][Status][Discuss] Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只经过困难值小于等于x的路径所能到达的山峰中第k高的山峰,如…
3551: [ONTAK2010]Peaks加强版 题意:带权图,多组询问与一个点通过边权\(\le lim\)的边连通的点中点权k大值,强制在线 PoPoQQQ大爷题解传送门 说一下感受: 容易发现一定选最小生成树上的边,然后用到了一个神奇的东西 Kruskal重构树 进行Kruskal过程中,每条边用一个点代替,左右儿子分别是连的两个点的当前的父亲 这样就形成了一棵树,叶子都是原图上的点,其他都是原图上的边 深度越小的点对应的边权值越大 两点路径上的权值不变 这样的话,与一个点通过权值\(\…
强制在线 kruskal重构树,每两点间的最大边权即为其lca的点权. 倍增找,dfs序对应区间搞主席树 #include<cstdio> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> #define N 100005 #define M 500005 using namespace std; int l[2*N],r[2*N],cnt,num_c…