正解:kruscal重构树+bfs 解题报告: 我永远喜欢loj! 感觉这题和这题挺像的,,,预处理和解题方法都是,,,所以大概整体二分能过去? 但因为做这题主要是入门一下kruscal重构树,,,所以还是港kruscal重构树滴解法好了QAQ 首先先说下预处理趴,就怎么知道每个点的水壶大小是多少 这个显然就和我放的链接那题差不多,只是这个是四联通bfs umm还是说下具体细节趴,,,还是有点儿区别来着QwQ 就对每个点记录离它最近的建筑的编号和距离,然后再拓展到别的建筑的时候就可以连起这两个建…
新增一道例题及讲解 Exkruscal \(Exkruscal\)又称\(Kruscal\)重构树,是一种利用经典算法\(Kruscal\)来实现的构造算法,可以将一张无向图重构为一棵具有\(2n-1\)个节点的树,这棵树具有许多特殊的性质,可以用来解决许多问题. 那么我们来了解一下这个新算法. Kruscal 先回顾一下\(Kruscal\)算法吧.这是一个经典的图论算法,用于求解无向图的最小生成树. 其算法大致思路为将边用边表的形式储存,按照权值从小到大排序,然后枚举每一条边,尝试连接不在同…
我们先看一道题:Luogu P4197 Peaks 这道题珂以用启发式合并+主席树来做 那么强制在线呢?(bzoj 3551 [ONTAK2010]Peaks加强版) 离线做法就不行了 我们就要用一个叫做kruscal重构树的东西来解决这个问题 克鲁斯卡尔重构树可以用来解决一类诸如"查询从某个点出发经过边权不超过val的边所能到达的节点"的问题 首先不难发现,上面这个问题肯定是在最小生成树上走最优,其他边都可以不用去管 kruscal构树的思想就是在建最小生成树的时候不是直接连边,而是…
BZOJ_3545_[ONTAK2010]Peaks_主席树+倍增+kruscal重构树 Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困难值,这个值越大表示越难走,现在有Q组询问,每组询问询问从点v开始只经过困难值小于等于x的路径所能到达的山峰中第k高的山峰,如果无解输出-1. Input 第一行三个数N,M,Q. 第二行N个数,第i个数为h_i 接下来M行,每行3个数a b c,表示从a到b有一…
[NOI2018]归程 题面太长辣,戳这里 模拟赛上写了一个spfa (关于spfa,它已经死了),然后一个st表水完暴力跑路.考后说是Kruscal重构树或者可持久化并查集???这都是些什么东西.不过还是填一下这个坑. STO YZK IOI2020捧杯<---学习笔记 然后自己yy写了重构树,感觉代码还算优美??吧 数组又又又又又又又又又开小了,dis数组也要开2*N. #include<bits/stdc++.h> #define Min(a,b) (a)<(b)?(a):(…
正解:$Kruscal$重构树 解题报告: 传送门$QwQ$ 发现一个图上搞就很麻烦,考虑变为生成树达到原有效果. 因为在询问的时候是要求走到的点编号尽量小,发现这个时候点的编号就成为限制了,于是不难想到把每条边的边权设为两个端点中的编号$max$,然后建个$Kruscal$重构树. 然后再维护一棵线段树和一个倍增数组,每次查询就是查子树乘积,修改就直接修改就成 $over$ 代码咕了$kk$…
正解:$kruscal$重构树 解题报告: 传送门$QwQ$ 语文不好选手没有人权$TT$连题目都看不懂真的要哭了$kk$ 所以先放个题目大意?就说给定一个$n$个点,$m$条边的图,每条边有长度和海拔.有$Q$组询问,每次查询从$x$出发,经过海拔超过$p$的所有路径,能到达的节点中距离1号节点的最短路径长是多少$QwQ$ 首先看到这个对海拔的限制就显然考虑$kruscal$重构树呗$QwQ$,然后说是所有海拔超过$p$的路径能到达的点中最短路最小的点$QwQ$? 可以理解成把最短路作为一个点…
网上感觉没有什么很详细 + 证明的讲解啊) 前置:Kruskal 求最小生成树. 这个算法可以将一棵树 / 无向连通图重构成一颗有性质的新树. 算法可以解决一些树上瓶颈边权之类的问题,可以把需要持久化的并查集给代替掉. 设 \(f_i\) 为 \(i\) 所在联通块的根. 算法流程和 Kruskal 最小生成树的过程非常类似: 将所有边按边权从小到大排序 顺序遍历每条边 \((u, v, w)\),若 \(u, v\) 已经联通跳过,否则建立一个新点 \(x\),让 \(x\) 作为 \(f_u…
洛谷P1967:https://www.luogu.org/problemnew/show/P1967 思路 感觉2013年D1T3并不是非常难 但是蒟蒻还是WA了一次 从题目描述中看出每个点之间有许多条路径 而我们需要的是找出整条路径中最大的最小可通过量 一开始看到题目会想到是不是最大流问题 但是仔细一想其实并不用那么麻烦 我们只需要用kruscal找出最大生成树即可(因为多条路径中只要挑出最大的即可) 然后在重构树上考虑怎么取到两点之间的最小值 我们发现图是一个或者是多个树(没有考虑WA了一…
非常好的一道图论问题. 显然,我们要求城市间的最小生成树,然后查询路径最大值. 然后我们有一个非常神的处理方法:进行多源 BFS,处理出每一个城市的管辖范围. 显然,如果两个城市的管辖范围没有交集的话连边一定不是优秀的(一定会有一种都在管辖范围之内的连边方式来代替这种连边方式) 然后由于每一个点只属于一个城市的管辖范围,所以每个点只会扩展一次,这个 BFS 的复杂度是线性的. code: #include <bits/stdc++.h> #define N 2006 #define M 200…