【引言】 由于树具有一般的图没有的特点,所以在竞赛中的应用更广。 在一些树上路径问题中,暴力求解时间复杂度过高,往往需要一些更为高效的算法,点分治就是其中之一。 【流程】 1、首先选取一个点,把无根树变成有根树。 那么如何选点呢? ——树型动规 因为树是递归定义的,所以我们当然希望递归的层数最小。 ...
分类:
其他好文 时间:
2016-09-27 13:18:02
阅读次数:
218
题意:给定一棵 n 个结点的有根树,使得每个深度中所有结点的子结点数相同。求多棵这样的树。 析:首先这棵树是有根的,那么肯定有一个根结点,然后剩下的再看能不能再分成深度相同的子树,也就是说是不是它的约数。那么答案就有了, 我们只要去计算n-1的约数有多少棵不同的树,然后就有递推式了。 代码如下: ...
分类:
其他好文 时间:
2016-09-11 20:17:09
阅读次数:
112
首先将每个平原缩成一个点,建出图,相邻两个点之间的边权为它们高度的较小值。 用Kruskal算法求出这个图的最大生成树,每次合并两个连通块时新建一个点指向它们,得到一棵有根树。 对于每个点,求出它子树内最高的峰,那么对于每个叶子,在它到根的路径上二分查找即可。 时间复杂度$O(nm\log(nm)) ...
分类:
其他好文 时间:
2016-09-07 19:04:07
阅读次数:
204
3653: 谈笑风生 Description 设T 为一棵有根树,我们做如下的定义:? 设a和b为T 中的两个不同节点。如果a是b的祖先,那么称“a比b不知道高明到哪里去了”。? 设a 和 b 为 T 中的两个不同节点。如果 a 与 b 在树上的距离不超过某个给定常数x,那么称“a 与b 谈笑风生” ...
分类:
其他好文 时间:
2016-09-07 17:33:49
阅读次数:
173
SRM 144 Div2 1100 PowerOutage 题意:给定一个有根树,求遍历完整棵树的最小路程 题解:DFS一下,求出叶子节点中到根节点的最远距离,然后把树的所有边相加,乘以二,减去最远距离就是答案 #line 2 "PowerOutage.cpp" #include<bits/stdc ...
分类:
其他好文 时间:
2016-09-07 01:35:37
阅读次数:
149
Description 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑士攻占 n 个城池。 这 n 个城池用 1 到 n 的整数表示。除 1 号城池外,城池 i 会受到另一座城池 fi 的管辖, 其中 fi <i。也就是说,所有城池构成了一棵有根树。这 m 个骑士用 1 到 m 的整数表示,其 ...
分类:
其他好文 时间:
2016-09-03 21:01:38
阅读次数:
196
题解: 题意读了半天。其实就是求一个连通子集,使得子集的所有点的权值最大 因为是无根树,所以dfs一次转化成有根树,然后将dfs序保存在vector里。然后根据vector反向dp即可 代码: ...
分类:
其他好文 时间:
2016-09-03 18:17:59
阅读次数:
145
Div2 1100 PowerOutage 题意:给定一个有根树,求遍历完整棵树的最小路程 题解:DFS一下,求出叶子节点中到根节点的最远距离,然后把树的所有边相加,乘以二,减去最远距离就是答案 Div1 550 Lottery 题意: 买彩票,给定一些彩票的描述:choice,blanks,sor ...
分类:
其他好文 时间:
2016-09-01 00:16:39
阅读次数:
185
题目:这里 题意: 在2016年,佳媛姐姐刚刚学习了树,非常开心。现在他想解决这样一个问题:给定一颗有根树(根为1),有以下 两种操作:1. 标记操作:对某个结点打上标记(在最开始,只有结点1有标记,其他结点均无标记,而且对于某个 结点,可以打多次标记。)2. 询问操作:询问某个结点最近的一个打了标 ...
分类:
编程语言 时间:
2016-08-31 00:36:19
阅读次数:
193
题目大意: 给定一棵有根树,每个点有一个权值,提供三种操作: 1.将x节点变为根节点 2.将x到y路径上的点的权值全部改为v 3.询问x的子树中点权的最小值 思路: 用DFS序剖分,记录每个节点入栈出栈的时间,其之间的区间即为子树。操作2用线段树直接搞,而换根先不管,可用原来的DFS序。询问时分类讨 ...
分类:
其他好文 时间:
2016-08-30 21:13:36
阅读次数:
161