首页 > 其他分享 >XorDistances

XorDistances

时间:2023-08-01 18:44:54浏览次数:40  
标签:le 复杂度 XorDistances dfs dfn out

[ABC202E] Count Descendants

考虑一个判断某个点 \(v\) 是否为另一个点 \(u\) 后代的方法:令 \(dfn_v\) 表示 \(v\) 的 \(dfs\) 序,令 \(out_u\) 表示离开 \(u\) 的子树时的最新的 \(dfs\) 序,由于一个子树内的 \(dfs\) 序是连续的,所以只要 \(dfn_u\le dfn_v\le out_u\)。

考虑将深度同一层的点按照 \(dfs\) 序为权值放到数组中,然后每次对于 \(D\) 层,二分找在 \(dfn_u,out_u\) 之间的点数即可。

复杂度 \(O(q\log n)\)。

还有一种解法,我们可以将每个点的深度按照 \(dfs\) 序为下标放到一个数组里,然后每次查询的就是一段区间内等于某个数的个数。可以考虑莫队,复杂度 \(O(n\sqrt q)\)。

代码二分

代码分块

标签:le,复杂度,XorDistances,dfs,dfn,out
From: https://www.cnblogs.com/wscqwq/p/17598778.html

相关文章

  • XorDistances
    [ABC201E]XorDistances首先,根据\(a\oplusa=0\),一条路径\(dis(u,v)=(dis(1,\text{LCA})\oplusdis(1,u))\oplus(dis(1,\text{LCA})\oplusdis(1,v))\),消去相同的,得\(dis(1,u)\oplusdis(1,v)\)。预处理从\(1\)到每个点的前缀异或,问题被转换成从\(n\)个数中选两个两两异......