【技巧与思想】st表/倍增
文章平均质量分 69
【技巧与思想】st表/倍增
A_zjzj
衢州华茂外国语学校郑钧
展开
-
HHHOJ #246 卡车 题解--zhengjun
题目传送门给定一个 nnn 个点的树,每个点有权值 viv_ivi,每条边也有权值 wjw_jwj,对于树上一条简单路径,它的权值就是路径上(包括两端点)min{vi}×∑wj\min{\{v_i\}}\times\sum w_jmin{vi}×∑wj,求最大的路径权值。显然可以发现可以将每个点按照 aia_iai 从大到小排序,枚举当前的 min{vi}\min\{v_i\}min{vi},然后发现原来的树会分成若干个连通块,只需要维护出每个连通块的直径即可。合并连通块的时候,用左边直径原创 2022-06-03 17:26:49 · 231 阅读 · 0 评论 -
洛谷P1081开车旅行题解--zhengjun
题面传送门我天,搞死我了,细节不少啊思路首先,一定会看出来可以在暴力的基础上加一点优化——预处理出每个点的第一近的点和第二近的点。(我枯了)然后,弄好之后,我们发现,如果从不同点开始,有可能还是会走到一起,(即为后面一段相同),所以,就有了另一个优化——倍增,如果还不会的话,可以看看rmqrmqrmq,ststst表。就是用fi,jf_{i,j}fi,j表示从iii点开始,走2j2^j...原创 2020-04-22 09:35:02 · 323 阅读 · 1 评论 -
洛谷P1084疫情控制题解--zhengjun
题面传送门我去我TM没有去掉freopen调了一下午⋯\cdots⋯思路因为如果第iii分钟可以控制住疫情,那么第i+1i+1i+1以及之后的都是可以的,所以,就可以二分了。然后就是checkcheckcheck函数如何写,有一个显而易见,就是每一个军队都要尽量靠近根节点,这样才会拦掉更多的点,所以,就要把每个军队向上提,如果可以到达根节点,就先放在一边,然后再处理,然后,因为到了根节点了...原创 2020-04-22 17:47:03 · 627 阅读 · 0 评论 -
P5903 【模板】树上 k 级祖先--zhengjun
思路开始的时候想用倍增求 k 级祖先卡过去,然后就在考虑倍增数组 f[N][K],究竟是哪一维放在前面要快一点,所以都打了一下。结果发现,一个会在 #9 TLE,另一个在 #8,#10 TLE,于是分成两类按照 2:12:12:1 的随机分布运行,然后就可以通过这道题了,最快用时:8.74s。代码 #1 倍增#include<bits/stdc++.h>using namespace std;typedef unsigned int ui;ui s;const int N=5e5+10原创 2022-05-26 19:09:30 · 171 阅读 · 0 评论 -
YbtOJ「字符串算法」第3章 后缀自动机 I. 独特子串 题解--zhengjun
题目大意给定 nnn 个字符串,求出每个字符串只属于该字符串的本质不同的非空子串的个数。思路如果没有做过这道 SA 入门题《不同子串个数》,那么请先了解这道题的 SA 做法。首先老套路,把所有字符串拼接在一起。然后单独考虑一个字符串 iii,首先求出这个字符串的每一个后缀有多少个前缀没有在其他字符串中出现过,假设当前在求排名为 iii 的后缀的值,那么就需要知道排名在 iii 前面的第一个后缀 sajsa_jsaj 与后缀 saisa_isai 不在同一个字符串里(即求出最大的 prei=jp原创 2022-05-26 21:02:30 · 184 阅读 · 0 评论