虚树 总结

我不相信人类......但是,我相信人类的“可能性”
深藏不露是一种卓越的才能
Luogu题单

虚树

前置芝士

虚树1

虚树2

所谓虚树吧,其实就是把一些有用的点给拿出来,然后通过最少的lca把这些节点给穿到一起,在新的树上做树形dp。

感觉这个专题的题目都挺好的,所以就基本上都写了篇题解。。

例题略解

P3233 [HNOI2014]世界树

题解

P2495 [SDOI2011]消耗战

半个板子题,大致思路就是先构建虚树,然后在虚树上做树形dp。

先求出每个点到根节点路径上的最小值,然后在dfs时,区分有供给的岛和没有供给的岛,分不同情况转移就好了。

\(code\)

P3320 [SDOI2015]寻宝游戏

有一点虚树的思想,但是实现上好像没有用到常规虚树的板子。

不难发现,最后的答案就是各个关键点之间的路径的权值乘2。

然后可以化成:

\[dis(s_n,s_1)+\sum\limits_{i=1}^{n-1}dis(s_i,s_{i+1}) \]

然后不难发现插入点为x,并且他的dfs序两边是y和z的时候i,贡献就是\(dis(x,y)+dis(x,z)-dis(y,z)\)

然后用STL的set维护就好了(当然平衡树,树状数组等也可以)。

  • 注意:set容器里元素不能it+1或者it-1,应该是it++或者it--这一类的。。。

\(code\)

P4103 [HEOI2014]大工程

题解

P5327 [ZJOI2019]语言

题解

posted @ 2021-07-07 11:36  Varuxn  阅读(80)  评论(0编辑  收藏  举报