
树分治
Lynstery
一只蒟蒻
展开
-
[动态点分治] BZOJ1095: [ZJOI2007]Hide 捉迷藏
题意给定N个节点的一棵树,一开始所有点都是黑色。需要执行Q个操作,操作有两种类型: 1.改变单点的颜色(黑变白,白变黑)。 2.询问最远黑色点对的距离。 N ≤100000, M ≤500000题解动态点分治经典题,一般和树上路径有关的题目都需要往这方面考虑。 对于每个点分树,我们把信息都收集到根节点上。 对于过某个根节点的路径,要求最长的一条:先对根节点的每个直接儿子求出以这个儿子为根的原创 2017-02-15 11:00:03 · 776 阅读 · 1 评论 -
[动态点分治] BZOJ3730: 震波
题意给定N个点的一棵边权都为1的树,每个点有点权 。M次操作,两种类型 1.单点点权修改。 2.给出x和k,询问到x的距离不超过K的所有点权和。 操作加密,强制在线。 N,M<=100000题解动态点分治。 同样把信息收集到根。对于每个点分树,把所有点放到一个树状数组中,数状数组的下标即是到根的距离。要注意相同子树中的东西计算重复了,为了抠去重复部分,还需要对每个点分树再开一个数状数组,维原创 2017-02-15 14:35:50 · 725 阅读 · 0 评论 -
动态树分治——模板整理
好像也不算什么模板。。。#include<cstdio>#include<queue>#include<algorithm>using namespace std;const int maxn=100005, maxe=200005;int n,m,w[maxn],last_print;int fir[maxn],nxt[maxe],son[maxe],tot;bool vis[max原创 2017-02-21 19:59:28 · 551 阅读 · 0 评论 -
[平衡树+启发式合并 || 点分治] POJ1741 Tree
题意这题就是楼教主男人必做八题之一 给出一棵有边权的树,以及一个数K,求距离小于等于K的点对的个数。题解点分治显然可做,对于当前点分树,把所有点到当前根的距离排序后扫一下即可。 复杂度O(nlog22n)O(nlog^2_2n)。 这里主要讲一下另一种不错的思路——平衡树+启发式合并。 具体做法: 随便找个根,然后递归下去从叶到根把子树不断合并。过程中,给每个子树建平衡树来存其中所有点到子树原创 2017-02-27 20:41:51 · 810 阅读 · 1 评论