![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树论
dinlon
这个作者很懒,什么都没留下…
展开
-
CF1284F New Year and Social Network(归纳法/倍增/并查集)
CF1284F New Year and Social Network 给定两棵n个点的树,然后要求从T1上删掉某一条边之后从T2上找一条边替换后使得T1仍然是一颗树,将这样的边视作匹配,求解最大匹配。 首先大胆猜测存在完美匹配,然后考虑利用归纳法证明,我们对 E(T1)−E(T2)=e∈T1∩e∉T2E(T_1)-E(T_2)=e\in{T_1}\cap e\notin{T_2}E(T1)−E(T2)=e∈T1∩e∈/T2 这个集合的大小进行归纳,当集合大小为0时显然两个树相同,然后可以每次找到原创 2021-03-02 22:32:23 · 68 阅读 · 0 评论 -
P2619 [国家集训队]Tree I(WQS二分/带权二分/最小生成树)
P2619 [国家集训队]Tree I 给定一个n个点,m条边的无向图,每条边有一个颜色黑色或者白色,求解恰好有k条白色边的最小生成树。 那么看到恰好选择k个的最优性问题,我们可以利用WQS二分解决,实际上就是利用了对于每个选择个数对应的最小值看作是平面上的点,它满足凸性,考虑二分一个直线来切这个凸包,对于每个点有b=g(x)−kxb=g(x)-kxb=g(x)−kx然后相当于给每个物品减去k的大小,然后求解最小值。 注意一些问题,就是比如有斜率相同的一段,那么我们无论怎么二分也无法恰好达到,但是我们可以二原创 2021-03-01 23:00:46 · 198 阅读 · 0 评论 -
P3233 [HNOI2014]世界树(虚树/倍增/动态规划)
P3233 [HNOI2014]世界树 每次给出mi个点,查询每个点控制的点的个数,每个点由离他最近编号最小的点控制。 首先按照套路建出虚树,注意特判1节点,然后用栈维护右链,然后不断弹栈建边。 然后进行dp,求解出虚树上每个点的最近控制点,对于控制点就是自己,需要两边dfs,第一遍处理子树,第二遍从上到下dp,这样就处理出在整个树上的控制点。 然后对于其他点我们需要分类讨论: 第一类就是直接连接到虚树节点上,但是不包含虚树节点的子树,这些点必然由g[u]控制,具体计算size可以用siz[u]减去包含虚树原创 2021-02-15 09:12:34 · 130 阅读 · 0 评论 -
P3345 [ZJOI2015]幻想乡战略游戏
P3345 [ZJOI2015]幻想乡战略游戏 带修改带权重心 这是经典的树上寻找关键点的题目,我们使用点分治处理这个问题,因为点分治的特性,就相当于在树上二分了。但是这与倍增不同,倍增只是在链上二分,而点分治则是在整棵树上二分。 然后我们考虑如何二分,显然带权重心的位置和边权无关,并且每次只需要寻找一个点的2sumv>sumu2sum_v>sum_u2sumv>sumu那么重心一定在这个子树内部。也就是说有一个儿子的答案比当前点小,那么重心就在这个子树内。我们可以维护3个变量。 su原创 2021-02-09 12:08:52 · 118 阅读 · 0 评论 -
P4211 [LNOI2014]LCA(树链剖分/树论/讨论贡献/拆分贡献/离线技巧/差分与前缀和)
P4211 [LNOI2014]LCA 给你一颗n个点的树,有q次询问,每次询问一个 区间内的点到z的lca深度和。 思路就是看上去像是一个二维问题,但是这个东西又不好维护,所以我们考虑交换枚举顺序讨论贡献,首先深度这个东西我们可以理解为该点到根节点经过的点数,然后现在我们将深度拆开了,然后考虑每个点的贡献,那么这个点的贡献等于在它下面的lca个数,然后如果一个点是两个点最近公共祖先的祖先,那么它一定是两个点的公共祖先。 所以问题转化为求解一些点和z的公共祖先个数,那么我们发现实际上就是他们两个点到根的链的原创 2021-02-06 08:04:28 · 33 阅读 · 0 评论 -
P2664 树上游戏(点分治/计数题计算贡献/树上差分)
P2664 树上游戏 对于树上n个点,每个点有不同颜色,求解每个点到其他点的路径上不同颜色个数之和。 首先看到这种树上点对问题,我们可以想到点分治,然后考虑每次分治如何求解答案,本质上就是一个数颜色的问题,然后我们采用类似的思路,考虑每个颜色第一次出现时的贡献,但是现在的问题就在于一条链是没有前后的,所以我们可能需要一些计算。 首先对于分治中心的贡献计算,我们可以从中心开始dfs,在每个颜色第一次出现的地方有size的贡献。 然后考虑每个子树内部的点,对于在从当前点到分治中心的链上出现过的颜色,我们直接将其原创 2021-02-05 20:18:48 · 135 阅读 · 0 评论 -
A. 树与路径(树论/多项式/分治FFT)
A. 树与路径 首先考虑一个dp的方法,对于这种链划分的题目,有一个很重要的思想就是按照每个点的角度考虑,实际上链划分就是匹配问题,每个点只能出一条边和入一条边,所以我们拆点之后就是匹配,这也是网络流最少链覆盖的思路。 这道题是在树上那么就有更好的性质,实际上对于每个点的状态就是将所连接的边进行匹配,并且每个点的状态是独立的,所以我们可以考虑一个暴力的dp,dpi,jdp_{i,j}dpi,j表示的是i这个点包含父亲边划分为j条链的方案数,然后可以得到转移如果没有链经过i,那么直接相乘,否则假设有k条原创 2021-02-01 22:26:25 · 146 阅读 · 0 评论 -
P4719 【模板】“动态 DP“&动态树分治(矩阵/轻重链剖分/ddp)
P4719 【模板】“动态 DP”&动态树分治 求解树上最大权独立集,但是需要支持修改。 https://www.luogu.com.cn/problem/solution/P4719 首先我们可以得到一个非常简单的dp式子,然后现在考虑怎么支持修改,首先每一次修改只会影响到当前节点的祖先,然后dp需要支持修改,可以利用矩阵处理。 但是仅仅利用矩阵,需要修改的也有O(n)个矩阵,我们考虑进行轻重链剖分,然后我们维护的状态转移仅仅权值包含轻儿子,然后从重儿子状态转移,这样转移矩阵中就只包含轻儿子的权值原创 2021-01-22 22:31:51 · 121 阅读 · 0 评论 -
CF1168D Anagram Paths(由必要到充分/虚树)
CF1168D Anagram Paths 对于这道题首先有一个关键的性质,那就是对于一个树,它是可重排的,当且仅当在树上任意一个节点,所有字母在相关联的字符串中出现次数最大值之和小于当前点到叶子的距离。这个性质可以通过归纳证明,首先对于一个点连接所有叶子的情况肯定成立,然后对于一般的情况我们发现所有儿子满足条件后可以当作一条链,其内部的字母集合是一定的,所以我们相当于对若干条不相交的链合并,那么上面的结论就是正确的,那么通过归纳我们可以得证。 然后得到这个性质之后,我们就知道如何求解答案了,但是还需要支原创 2021-01-20 23:16:40 · 115 阅读 · 0 评论 -
[2020多校A层12.1]树(倍增/单调栈/dfs栈)
[2020多校A层12.1]树 求解树上从u到v的最长贪心上升序列,也就是只要有比它大的就选择它,可以发现这个问题性质,就是每个点对应了唯一的一个第一个比它大的点,那么我们可以向它们之间连边,然后问题就转化为求解从当前点上面的链中第一个大于c的位置和第一个深度小于dep[v]的位置。然后树上倍增维护即可。 另外我们也可以用单调栈直接处理,将询问离线,然后维护当前点向根这条链的单调栈,然后二分对应位置即可。然后对于回溯需要存储下来弹掉的元素,然后回溯时要加回去。 ...原创 2020-12-01 19:24:56 · 102 阅读 · 0 评论