LOJ3225「PA 2019」Podatki drogowe【二分,边分治,主席树】

给定 \(n\) 个点的树,第 \(i\) 条边 \((a_i,b_i)\) 的边权 \(n^{p_i}\)

\(\binom n2\)\(d(u,v)\) 中第 \(k\) 小的值。

\(n\le 2.5\cdot 10^4\)\(1\le k\le\binom n2\)\(1\le a_i,b_i,p_i\le n\)


因为值域大,所以随机取数进行二分。

因为不太能判断什么时候停止二分,所以取个定值,比如 \(50\) 次。

为了方便地做 two-pointer,考虑边分治,固定一端就可以对另一端排序然后做 two-pointer。

为了方便地比较两条路径的大小,可以用类似字符串 hash 算 lcp 的方式,用主席树维护 hash 值即可。

这里的主席树是套在边分治内层的,于是空间 \(O(n\log^2n)\),时间 \(O(n\log^3n)\)

实现比较烦,不想写代码啊啊啊啊啊啊。。。

posted @ 2021-06-29 16:47  mizu164  阅读(198)  评论(0)    收藏  举报