一般如果需要大规模处理树上路径,点分治是一个不错的选择 在解决树上路径满足某种属性的数量统计方面有着很大的作用 点分治的核心抄dalao的两句话: 然后稍微说一说动态点分治,在原来点分治的基础上,添加一个fa数组 我们相当于通过fa数组重建了一棵点分树。这棵点分树的深度是最多logn的 在点分治中, ...
分类:
其他好文 时间:
2018-09-10 22:22:59
阅读次数:
188
POJ-1741 题意: 对于带权的一棵树,求树中距离不超过k的点的对数。 思路: 点分治的裸题。 将这棵树分成很多小的树,分治求解。 #include <algorithm> #include <iterator> #include <iostream> #include <cstring> #i ...
分类:
其他好文 时间:
2018-08-20 22:52:24
阅读次数:
146
一些无关紧要的事: 似乎很久没写题解了……象征性地更一篇。另外很多blog都设了私密,不是很敢公开,不过说不定哪天会公开的。 link 题意: 最优树的点分治:使得点分最大层数最小。(听说是经典问题) $n\leq 10^5.$ 题解: 性质+贪心。 给每个点按照高度标号(即从深度最深的开始标1,它 ...
分类:
其他好文 时间:
2018-08-17 11:14:01
阅读次数:
202
题面 "题目传送门" 解法 动态点分治模板题 什么是动态点分治呢??? 静态的点分治就是不断地找到当前树的重心,然后分成若干个子树继续递归下去 但是如果有修改似乎静态的就不好处理了 我们现在引入一个叫点分树的东西 说白了,就是每一次静态点分治的时候这一次的重心和上一次的连边,这样形成了一棵树 再说清 ...
分类:
其他好文 时间:
2018-08-14 22:52:10
阅读次数:
185
题面 "题目传送门" 解法 挺恶心的题 考虑动态点分治,先建出点分树 然后每一个点开两个堆,分别为$a,b$ $a_i$表示点分树上$i$子树中所有节点在原树上和点分树中$i$父亲的距离,$b_i$表示点分树中$i$所有儿子的堆顶 再开一个堆$ans$,存每一个$b_i$最大和次大值的和 在修改的时 ...
分类:
其他好文 时间:
2018-08-14 19:54:21
阅读次数:
175
点分治详解 一.概念 ? 是处理树上路径的一个极好的方法。如果你需要大规模的处理一些树上路径的问题时,点分治是一个不错的选择。 二.具体思路 ? 大多数同学的暴力做法都是对于每一个点对(u,v) 进行dfs来求解。但其实利用分治这一种算法,可以大大减少搜索的时间复杂度。 ? 对于一个序列上的区间和等 ...
分类:
其他好文 时间:
2018-08-12 22:22:13
阅读次数:
201
1 概述 点分治是一种对树上符合某种条件的路径进行静态统计的算法。 当然,动态点分治(点分治树)是有的,但此篇文章暂不涉及。 这种算法的思想就是:对于一棵树,可以把树上的路径分为两类,一类是经过根结点的,一类是不经过根结点的。对于第二类路径,我们可以通过将根节点的每棵子树作为子问题递归处理,这样,我 ...
分类:
其他好文 时间:
2018-08-12 22:21:30
阅读次数:
144
点分治我感觉是图论树部分比较考验脑力的一种题目了 POJ1741 题意:给一棵边带权树,问两点之间的距离小于等于K的点对有多少个 满足条件的点对有两种情况:两个点的路径横跨树根,两个点位于同一颗子树中 对于根节点进行一次dfs,求出deep,并将其从小到大排序 然后看一下calculate 如果我们 ...
分类:
其他好文 时间:
2018-08-11 23:24:26
阅读次数:
196
给定一棵树,求树的重心的编号以及重心删除后得到的最大子树的节点个数size,如果size相同就选取编号最小的. 首先要知道什么是树的重心,树的重心定义为:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重 心后,生成的多棵树尽可能平衡. 实际上树的重心在树的点分治中有 ...
分类:
其他好文 时间:
2018-08-11 01:18:20
阅读次数:
153
You are given a tree (a connected acyclic undirected graph) of n vertices. Vertices are numbered from 1 to n and each vertex is assigned a character f ...
分类:
其他好文 时间:
2018-08-07 13:10:27
阅读次数:
189