树分治
文章平均质量分 92
zxyoi_dreamer
退役了退役了爬了爬了,搞个锤子算法竞赛,不如好好享受大学生活。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【THUPC2019】不用找的树 / tree(树分块)(树形DP)
传送门是我没见过的树分块姿势,出题人写的题解跟****一样,只有会这道题的人才看得懂,反正我没看懂,我看了std那8K难以形容的代码才知道题解真就NM乱写。严格来说,只有分块的具体方法那里是乱写,但是那里乱写直接导致了后续的无法理解。出题人:反正预计也不会有人想去写,题解乱写就行了。那乱写说是垃圾也就不为过了。所以这里来一个我的视角的题解。更离谱的是树上距离的定义居然是路径上点数而不...原创 2020-04-15 14:37:05 · 718 阅读 · 2 评论 -
【2019集训队互测】最短路径(点分治)(NTT)(分治)
传送门题解:树的部分直接点分治+NTT合并算出所有距离有多少点对即可。有环的话,再上一个分治即可。代码:#include<bits/stdc++.h>#define ll long long#define re register#define cs constnamespace IO{inline char gc(){ static cs int Rlen...原创 2020-04-14 16:21:38 · 459 阅读 · 1 评论 -
【校内模拟】string (SAM)(DSU on tree)
简要题意:给一个串,询问有多少个区间可以由某一个串重复 kkk 次得到。题解:首先很容易发现就是询问有多少个子串有 n/kn/kn/k 的循环节。也就是说要有 n−n/kn-n/kn−n/k 的 border。也就是求由多少对 l,rl,rl,r,满足 lcs(l,r)≥(r−l)⋅(k−1)lcs(l,r)\ge (r-l)\cdot(k-1)lcs(l,r)≥(r−l)⋅(k−1)...原创 2020-02-29 16:09:05 · 358 阅读 · 0 评论 -
【LOJ6289】花朵(树上背包)(NTT)(链分治)(带权二分)
传送门题解:老年选手搞了半个月的文化课开始康复训练。很显然要求的就是个独立集形式的树上背包。写成卷积的形式链分治+带权二分即可。很好写,拿下LOJ rk1。复杂度 O(nlog2n)O(n\log^2n)O(nlog2n),分析方式类似全局平衡二叉树。看了下AC代码,除了我和rk2,剩下的分治部分似乎都是普通二分而不是带权二分,可以卡到 O(nlog3n)O(n\log^3 n...原创 2020-02-10 13:40:38 · 1122 阅读 · 4 评论 -
【BZOJ3451】【Tyvj1953】Normal(点分治)(NTT)
传送门题解:很妙的思路,考虑每个点对的贡献,实际上就是考虑其中一个点作为一个分治中心的时候另一个点是否能够产生贡献。要求就是所有它们路径上的所有点都还没有被选,概率为1dis(i,j)+1\frac{1}{dis(i,j)+1}dis(i,j)+11,直接上点分治算每种距离出现了多少次就行了,发现合并是一个卷积,直接用NTT就行了。代码:#include<bits/stdc++...原创 2019-08-26 19:20:53 · 221 阅读 · 0 评论 -
【BZOJ2566】xmastree(点分树)
传送门题解:可能手残到了一定程度才会像我一样在算子树siz的时候将siz[u]+=siz[v]打成siz[v]+=siz[u],然后莫名其妙挂一堆点思路挺简单,码起来没什么细节就是有点长~建立点分树,每个分治中心维护两个东西,各个子树中每种颜色到自己的最小距离的序列,自己掌管的子树中每种颜色的点到分治父亲的距离的序列。显然自己更新答案就是考虑每种颜色将两个来自不同子树的路径拼起来,然后...原创 2019-09-27 11:15:42 · 385 阅读 · 0 评论 -
【BZOJ4372】烁烁的游戏(动态点分治)(树状数组)
传送门题解:建立点分树,每个分治中心开一个树状数组,表示它对所有到它距离为ttt的点的贡献每次修改直接暴跳分治树父亲修改,发现父子分治中心会对一些点有重复贡献,每个儿子开一个树状表示它的连通块内距离父亲不超过ttt的点被重复贡献了多少。询问暴跳点分树查每一个分治中心的树状数组即可。代码:#include<bits/stdc++.h>#define ll long lo...原创 2019-09-27 14:42:22 · 214 阅读 · 0 评论 -
【CF1010F】Tree(链分治)(分治NTT)
传送门时限7s的题的复杂度令人捉摸不透。。。O(nlog3n)O(n\log^3n)O(nlog3n)拿下CFrk1(仗着这道题分治FFT部分常数小),好像std也是O(nlog3n)O(n\log^3 n)O(nlog3n)的。。。问题简述如下:一颗二叉树,根节点为111,允许你砍掉任意子树,保留根节点所在的连通块,然后要求你设置每个点的权值,要求每个点权值不小于它的两个儿子的权值...原创 2019-09-28 21:02:42 · 670 阅读 · 0 评论 -
【Ynoi2011】D1T3(点分树)(树状数组)
传送门题解:考虑保留[l,r][l,r][l,r]的点的时候xxx所在的联通块怎么表示。考虑点分治的时候第一次把分治中心放到这个联通块里面的那次分治。取出这个分治中心,则统计颜色就变成了在它子树内部,只通过编号在[l,r][l,r][l,r]内的点能够到达多少种不同颜色。离线,二维数点,树状数组维护一下就没了。代码:#include<bits/stdc++.h>#d...原创 2019-10-01 20:06:20 · 473 阅读 · 0 评论 -
【CTSC2010】珠宝商(SAM)(点分治)(根号分治)
传送门给你一棵树,树上每个点有字符,询问所有树上路径形成的字符串在给定模式串中一共出现了几次。在模式串中不同位置出现要多次计算。题解:好题啊。树上路径统计类的问题显然考虑的一般就是链分治和点分治。而这种路径形成字符串的东西显然不是链分治可以搞的。考虑点分治,假设当前分治中心为uuu,则我们需要考虑v→u→wv\rightarrow u\rightarrow wv→u→w的路径。我们...原创 2019-10-10 14:38:55 · 301 阅读 · 0 评论 -
【8.22测试爆零记】
T1:wykres线段树分治+可回退化并查集。需要比较精细的实现,不然会被卡常。下面给出一个在时限的1/5内通过所有点的代码。代码:#include<bits/stdc++.h>#define ll long long#define re register#define gc get_char#define cs constnamespace IO{ inlin...原创 2019-08-23 19:57:33 · 246 阅读 · 0 评论 -
【LOJ6681】yww 与树上的回文串(点分治)(AC自动机)(字符串哈希)(回文串broder理论)
传送门社论(题解):首先长剖重剖都考虑过了,并没有办法支持快速合并,边分更不用说了,权值在边上怎么边分怎么蛋疼。考虑点分,我们知道如果一个回文串过了重心,他要么就是重心延伸出去的回文前缀,要么它被重心分成两段,短的一定是长的后缀。很显然我们考虑用AC自动机求出这种后缀关系。那么现在问题变成了,代码:#include<bits/stdc++.h>#define ll ...原创 2019-07-18 19:23:22 · 1066 阅读 · 0 评论 -
2018.10.17【校内模拟】友好国度(点分治)
传送门(内网)解析:AAA的第一道点分治。。。想起来我AAA的第一道数位DPDPDP也是在考场上YYYYYY出来的呢(当时还套了一个状压)思路:看到题目发现很好写暴力,30pts30pts30pts的O(n2)O(n^2)O(n2)和40pts40pts40pts的状压,就把70pts70pts70pts到手了,场上滚去想T2T2T2正解就只写了两个暴力滚粗了。暴力还拿了全场最高分。。...原创 2018-10-17 21:59:24 · 240 阅读 · 0 评论 -
2018.10.26【校内模拟】图(点分治(被卡常))(权值线段树合并(完爆标算))
传送门解析:考场上写完T1T1T1后,本来说睡一会起来写T2T2T2,结果刚趴下五分钟就想出了点分治写法,一发过了大样例。结果最后卡常只剩80分。。。结果标程是KruskalKruskalKruskal重构树上离线树状数组。。。O(nlog2n)O(nlog^2n)O(nlog2n),我的点分治明明也是O(nlog2n)O(nlog^2n)O(nlog2n)。。。可怕的是标程在OJ上直接...原创 2018-10-26 22:38:49 · 251 阅读 · 2 评论 -
2018.11.05【校内模拟】树(长链剖分)(复杂度多一个log(过不了)的点分治)
传送门解析:OJ又双叒叕卡栈空间。。。思路:首先看到距离不超过kkk很容易想到点分治。每次处理出子树中所有点到分治中心的距离,然后处理一个二进制前缀和,双指针扫一遍数列,就可以愉快的做完这道题?点分治复杂度O(nlognlog∣A∣)O(nlognlog|A|)O(nlognlog∣A∣),卡在2e82e82e8的极限,本来递归算法常数就大,卡不动了。。。但是愿意卡常数的话考场上还...原创 2018-11-05 08:24:13 · 206 阅读 · 0 评论 -
2018.12.08【BZOJ2599】【IOI2011】Race(点分治)
传送门解析:点分治一般是统计问题,而这道是一个最优化问题,所以处理上不方便使用容斥原理。思路:那么怎么统计呢?考虑我们维护一个数组fff,表示距离当前分治重心距离为iii的点,到分治重心路径上的最小边数,然后每次处理一棵子树,直接把子树内部所有点的信息先在fff上面询问一次,看能否凑成kkk, 整棵子树处理完了之后再把这颗子树的信息加到fff数组里面去,供其他子树查询的时候用。分治其...原创 2018-12-08 14:25:09 · 191 阅读 · 0 评论 -
2018.12.08【FJOI2014】【BZOJ4016】【洛谷P2993】最短路径树问题(最短路)(点分治)
BZOJ传送门洛谷传送门解析:辛辛苦苦调了半天发现是最短路树建错了。。。思路:首先跑一个最短路,然后将每个点的所有出边按照出点编号排序,DFS建出最短路树。这样建树才能够保证字典序是最小的。(naive的我按照前驱结点建树WA哭了)那么看一下题目要统计的东西,似乎是可以用点分治来做的。注意这个统计的前提是最优化,所以不可以用容斥原理来做。那么对于每一个分治重心,按照子树顺序处理...原创 2018-12-08 16:26:27 · 288 阅读 · 0 评论 -
2019.01.01【SCOI2016】【BZOJ4568】【洛谷P3292】幸运数字(线性基)(点分治)
BZOJ传送门洛谷传送门解析:第一眼倍增+线性基合并O((n+m)lognlog2∣Gi∣)O((n+m)\log n\log^2|G_i|)O((n+m)lognlog2∣Gi∣),复杂度过不了。第二眼树分块+线性基合并O((n+m)nlog2∣Gi∣)O((n+m)\sqrt n\log^2|G_i|)O((n+m)nlog2∣Gi∣),复杂度过不了。算了写点分治吧。。...原创 2019-01-01 23:15:59 · 242 阅读 · 0 评论 -
2019.01.11【CodeChef PRIMEDST】Prime Distance On Tree(点分治)(FFT)
传送门解析:很裸的点分治,很裸的卷积直接上FFT。思路:这个问题,统计路径,显然直接上点分治啊。每次统计出到分治重心距离为ddd的有多少个,记录到一个数组AAA里面,然后我们发现需要将两条路径拼起来再计算出现次数。。。然后发现这就是自我卷积。。。直接上FFTFFTFFT然后利用预先筛出的质数表来统计答案就行了。UPD:去其他的博客上逛了一圈,好像有点不对。。。没有太看懂其他人...原创 2019-01-11 19:29:45 · 226 阅读 · 0 评论 -
【洛谷P5114】八月脸(Minkowski和)(边分治)
传送门解析:先就本题聊两句:本题出题人shadowice1984退役了,对,就是sjzez那位大毒瘤shadowice1984,每次打他id我都要抱怨这名字怎么这么长的的那位shadowice1984,就是那个常年活跃在洛谷各大毒瘤题题解区和讨论区的那个shadowice1984。TA退役了。也正是看了他的退役记后我才决定要把这道我本来想着永远咕掉的毒瘤题写出来,并卡到洛谷rank1(也做...原创 2019-06-13 15:51:58 · 482 阅读 · 0 评论 -
【模板】点分治
参考题目:POJ1741解析:联赛后统一更模板题题解代码:#include<iostream>#include<cstdio>#include<cctype>#include<algorithm>#include<cstring>using namespace std;#define ll long long#d...原创 2018-10-17 21:34:05 · 220 阅读 · 0 评论
分享