树链剖分
DZYO
Never stop
展开
-
BJ模拟:路径规划(树的直径)
传送门题解: 边从小到大加入即可,我们只需要动态维护树的直径和经过当前边的最长链。 显然动态树可做,不过为O(nlog2n)O(nlog2n)O(n \log^2 n)直径有优美的性质,如果合并两颗树S,TS,TS,T,之前的直径分别为(Sx,Sy),(Tx,Ty)(Sx,Sy),(Tx,Ty)(S_x,S_y), (T_x,T_y),那么新的直径一定是(Sx,Sy),(Sx,Tx)...原创 2018-04-10 19:05:15 · 410 阅读 · 0 评论 -
Codechef :Push the Flow!/PUSHFLOW (树链剖分)
传送门题解:不错的树链剖分练习题。又是毒瘤仙人掌,先把环缩起来,然后链剖维护重链上相邻的环的最小值。对于轻边特殊处理,此时要对每个环再维护一个线段树。时间复杂度O(nlog2n)O(n \log^2 n)O(nlog2n)。#include <bits/stdc++.h>using namespace std;typedef pair <int,int> ...原创 2018-10-11 11:49:52 · 360 阅读 · 0 评论 -
Codechef:Dynamic GCD/DGCD(树链剖分)
传送门题解:区间加减维护gcd很麻烦,不过gcd可以差分,然后就变成单点加减了,用树链剖分维护一下原数列和差分数列即可,时间复杂度O(nlog3n)O(n \log^3 n)O(nlog3n)。#include <bits/stdc++.h>using namespace std;const int RLEN=1<<18|1;inline char nc() ...原创 2018-10-16 12:03:17 · 435 阅读 · 0 评论 -
51nod1819 :黑白树 V2(树链剖分)
传送门题解:NOIP之前当然要做做NOIP题啦!这道题并不难(想),把一个点的权值定为(u−fau)(u-fa_u)(u−fau)乘上子树黑点个数,然后就相当于是支持查询链和,链修改,子树修改了,用了链剖分开维护奇偶的情况即可。#include &amp;lt;bits/stdc++.h&amp;gt;using namespace std;typedef long long LL;const ...原创 2018-11-09 18:06:30 · 367 阅读 · 0 评论 -
UOJ#268. 【清华集训2016】数据交互(链分治)
传送门题解:首先一个显然重要的结论是两个链相交当且仅当一个链的lca在另一条链的路径上,或者lca相同。先链剖,然后我们对于每个点计算以这个点为lca的最大路径,分为两种情况:1.路径位于两个虚儿子中。这种情况很简单,因为每个点到根只有O(logn)O(\log n)O(logn)条虚边,每个点维护一个multiset就行了。2.一条位于实儿子中。每个点到根只有O(logn)O(\l...原创 2018-11-02 14:48:15 · 600 阅读 · 0 评论