
虚树
取竹
Hai capito?
展开
-
[bzoj] 2851: 极限满月
这道题初看时没想到过数,看了题解才知道可以建虚树。对题目分析可以将b数组想成一颗数,第i个就是i到根节点的上路径的所有点。那么在构造树时就相当于将a数组中的所有点取lca ,再将i节点连到lca上。这样的复杂度是O(nlogn)的。在询问时离线处理,dfs更新每个点对问题的贡献。其深度减去lca的深度即为贡献。#include #include #include us原创 2017-07-04 17:38:22 · 376 阅读 · 0 评论 -
虚树
虚树在解决树上的问题时,我们经常会查询点对之间的关系。如果直接在原树上进行询问,那么时间级别就会是o(n)级别的,但实际上原树上有许多不必要的点。如果将必要的点挑出来建立一颗新的树,在新树上查询的复杂度就基本为o(1)的了。我们把这样的树叫做虚树,它将两个点之间的链缩减为一条边,极大优化了时间。那么如何构造呢?我们预处理出节点的dfs序,令dfn表示dfs序,并将要处理的点以dfs序排序,并开一个栈原创 2017-09-27 15:36:28 · 693 阅读 · 0 评论