1.Tree
Description:
求一棵树中长度不超过\(K\)的路径条数
Solution:
直接统计深度,由于深度的贡献具有单调性
考虑每次统计答案时先排序,然后双指针每次相减
这样就比\(n^2\)统计优秀多了,记得要减掉算重的
2.[模版]点分治1
Description:
求一棵树中是否存在长度为\(K\)的链,\(m\)组询问,\(m \le 100\)
Solution:
考虑每次用桶把路径长度标记,把所有询问在桶里查一遍,再清空桶
复杂度\(O(nmlog^2n)\)
#include
3.聪聪可可
Description:
给你一棵树,询问有多少条路径满足边权和为3的倍数
Solution:
和Tree差不多......统计时开3个桶,乘法原理搞一下就行
4.Distance in Tree
Description:
给你一棵树,问路径长为K的条数
Solution:
方法同2,如果你无聊的话可以写个类似Tree的写法用<=k的减去
居然跑了rk5?
#include
5.[IOI2011] Race
Description:
求树上的一条路径,长度为K且边最少
Solution:
其实也很简单,就用Tree的方法直接计数,然后减去
不同的是,要把答案扔到一个边数桶里
6.树上游戏
Description:
lrb有一棵树,树的每个节点有个颜色。给一个长度为n的颜色序列,定义s(i,j) 为i 到j 的颜色数量。以及
现在他想让你求出所有的sum[i]
Solution:
毒瘤题,考虑第一次碰到一种颜色会产生该点子树的贡献
看代码吧:
#include
7.[BJOI2017]难题
Description:
每条边有颜色,路径的权值定义为连续颜色段权值的和,求一条长为[L,R]路径的最大权值
Solution:
本来可以直接开桶维护最大值
但是更新答案时要查询一段区间,很烦
考虑类似滑动窗口那题的单调队列优化
或者你也可以写个线段树合并
这题恶心的一点是你要考虑颜色相同时的合并
所以遍历儿子时要把相同颜色边的弄到一起,方便讨论
合并时注意还要按深度启发式合并,保证复杂度
#include