摘要: 点分治 什么是点分治? 点分治主要用于有关树上路径统计的问题。 怎么点分治? 1,选取一个点,把树变成有根树。为了让递归层数尽可能的小,我们要选取树的重心,即子树大小最大值最小的点。 2,处理联通块中通过根的路径。 3,删除根节点。 4,递归处理子树。 操作 例题们 POJ - 1741 BZOJ 阅读全文
posted @ 2018-01-02 23:32 p0ny 阅读(193) 评论(0) 推荐(1) 编辑
摘要: 咱知道,莫队算法可以解决一些序列上区间的问题,但是那个树,它可不是一个序列哟。怎么办呢?不要紧,咱把树拍平,拍成一个序列就行了哟。 怎么拍呢? 记时间$D$,咱进入某一点$u$的时候打一个时间戳$I_u=++D$,出去的时候再打一个时间戳$O_u=++D$。 这样咱就得到了一个长度为$2N$,每个点 阅读全文
posted @ 2017-12-28 16:37 p0ny 阅读(136) 评论(0) 推荐(0) 编辑
摘要: UOJ 题解:树上莫队转移。 一开始UV打错,WA了一发。 1 #include<cmath> 2 #include<cstdio> 3 #include<iostream> 4 #include<vector> 5 #include<algorithm> 6 #define pb push_bac 阅读全文
posted @ 2017-12-28 16:22 p0ny 阅读(140) 评论(0) 推荐(0) 编辑
摘要: Haruna’s Breakfast 1 #include<cassert> 2 #include<cmath> 3 #include<cstdio> 4 #include<vector> 5 #include<iostream> 6 #include<algorithm> 7 #define pb 阅读全文
posted @ 2017-12-28 16:11 p0ny 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 3339: Rmq Problem 3585: mex 题解:分块维护权值,用莫队转移。 分块修改操作$O(1)$,查询$O(\sqrt{A_{max}})$。莫队转移$O(m\sqrt n)$。总共是$O(m\sqrt n)$ 一份代码解决两道题。额外的经验! 阅读全文
posted @ 2017-12-27 21:52 p0ny 阅读(121) 评论(0) 推荐(0) 编辑
摘要: SPOJ - COT2 首先容咱吐槽一下,这spoj跟bzoj一个尿性,RE显示成WA,害的咱弄了近一个小时。 题意:一颗树上每个点都有一个权值$v$,求一条路径上权值的种数。 题解:树上莫队。 首先咱dfs一下,记录这棵树的欧拉序$f$(就是进入的时候记录,出去的时候再记录的那种)。这样就把莫队在 阅读全文
posted @ 2017-12-27 21:34 p0ny 阅读(811) 评论(0) 推荐(0) 编辑
摘要: 咱可以差分一下,把$u-v$这条路径上的$z$都加$1$变成$u$和$v$的$z$加$1$,$lca$和$fa_{lca}$的$z$减$1$。 用线段树实现最大值的查询,最后$dfs$自底向上一路合并并查询即可。 先开始线段树数组开小了,$RE$了一次。 阅读全文
posted @ 2017-12-27 11:53 p0ny 阅读(168) 评论(0) 推荐(0) 编辑
摘要: RUA 阅读全文
posted @ 2017-12-26 21:39 p0ny 阅读(114) 评论(0) 推荐(0) 编辑
摘要: AtCoder Regular Contest 088 C - Multiple Gift 输出$log_2\frac{y}{x}$。 1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 typedef long long 阅读全文
posted @ 2017-12-26 21:04 p0ny 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 传送门 对每个联通块建一棵线段树,并用并查集维护联通块的根。 先开始WA了几次,要注意每次操作都是对联通块的根进行的。 阅读全文
posted @ 2017-12-26 14:38 p0ny 阅读(122) 评论(0) 推荐(0) 编辑