随笔分类 -  树形算法/结构

摘要:题意 有一棵树,q个询问,每次询问,指定一个点做树根,再给定k个点,要求把这些点分成不超过m组的方案数,分配的限制是任意两个有祖先关系的点不能分在同一组。题目还保证了所有的询问的k加起来不超过1e5。 思路 如果直接在原树上DP计数,那么q次询问下的DP总复杂度是平方级别的,显然不对。 由于询问点数 阅读全文
posted @ 2019-03-16 17:21 __orange 阅读(362) 评论(0) 推荐(0)
摘要:简介 对于一颗静态树,O(nlogn)时间内处理子树的统计问题。是一种优雅的暴力。 算法思想 很显然,朴素做法下,对于每颗子树对其进行统计的时间复杂度是平方级别的。考虑对树进行一个重链剖分。虽然都基于重链剖分,但不同于树剖,我们维护的不是树链。 对于每个节点,我们先处理其轻儿子所在子树,轻子树在处理 阅读全文
posted @ 2019-03-03 05:30 __orange 阅读(425) 评论(0) 推荐(0)
摘要:"F. Dominant Indices" 题意: 给一颗无向树,根为1。对于每个节点,求其子树中,哪个距离下的节点数量最多。数量相同时,取较小的那个距离。 题目: 这类题一般的做法是树上的启发式合并,复杂度是O(nlogn)。但由于这题所求的信息与深度有关,因此可以使用长链剖分的技巧,复杂度可以是 阅读全文
posted @ 2019-01-24 18:22 __orange 阅读(205) 评论(0) 推荐(0)
摘要:"Codeforces 869E. The Untended Antiquity" 题意: 在一张mxn的格子纸上,进行q次操作: 1,指定一个矩形将它用栅栏围起来。 2,撤掉一个已有的栅栏。 3,询问指定两点之间是否连通(即能否从其中一点不翻越栅栏走到另一点) 思路: 对于操作1,将给定的矩形哈希 阅读全文
posted @ 2018-11-20 22:48 __orange 阅读(270) 评论(0) 推荐(0)
摘要:看了网上三四篇博客,学习了AVL树维护平衡的方式。但感觉他们给出的代码都有一点瑕疵或者遗漏,懂得了思想之后,花了一些时间把他们几篇的长处结合起来,没有使用指针,实现了一下。每个小逻辑功能都抽象成了函数,应该比较好理解,代码逻辑看起来也比较清晰。 下面给出主要的功能插入和删除 。至于其他一些没有动到树 阅读全文
posted @ 2018-11-05 09:35 __orange 阅读(383) 评论(1) 推荐(0)
摘要:树链剖分 树剖是将树的节点分为轻重点,再将边分为轻重链,然后用树状数组、线段树等数据结构进行维护的算法思想。个人认为本质上可以看作线段树等维护区间的数据结构在树上的推广应用。换句话说,就是将树hash成几段连续区间以便数据结构来维护。 适用问题 对于一棵有点权的树 对两点间最短路径上点的修改与询问操 阅读全文
posted @ 2018-09-28 02:26 __orange 阅读(289) 评论(0) 推荐(0)