DFS Trees:
经过深思熟虑我们可以发现,可以将最小生成树以任意一个节点为根节点拎出,然后考虑每条非树边,当不条边作为横插边(u,v)出现时,那么将在S[root]-S[u]-S[v]中的点进行findMST都不合法,S[k]表示以k为根节点,在整棵树根为root的情况下的树的电集。又发现我们可以只任意找出一个根进行处理,将当期意义下的返祖边进行类似的统计,也可以达成目的,所以只需要O(N)就解决了。标记时用树上差分覆盖。
[SDOI2011] 消防:
经过深思熟虑可以发现这条路径一定在树的直径上(比较好证明的),然后处理处直径上每个节点走不经过直径的边可以到达的最远节点(不需要处理经过直径的因为如果处理了,答案肯定小于等于选区路径的端点到直径端点的距离,肯定不会对答案产生贡献)。随后使用双指针和单调队列即可。
[省选联考 2021 A/B 卷] 宝石:
发现有存在匹配,深思熟虑后考虑倍增,在下行时则使用二分。预处理可以用STL乱搞,(不需要主席树。