搬运自洛谷博客,原发表时间:2022-12-12
note:这个做法题解区似乎没有,但是非我原创,因此目前不考虑投题解。(CF Tutorial Sol2 倒确实是这个)
为什么题解区都是线段树分治/虚树/LCT?
这题粗略解法就是求某条边的贡献,把某种颜色的边全部删光,然后一条该颜色边的贡献就是两端连通块大小的乘积。
使用带删并查集即可处理。
但是这个东西暴力去做是 \(O(n^2)\) 甚至 \(O(n^2 \log n)\) 的。。
考虑怎么尽可能多地利用已经加好的边,不每一次删光。
对颜色的值域分治。
处理一边的时候就不用把另一边删完了。于是每个边被加边/删除 \(n \log n\) 次,时间复杂度 \(O(n \log ^2 n)\)。
核心代码只有1k,简洁、常数小。