树上求 LCA .
对于第 $i$ 个操作,新建一个点 $p$ ,从 $p$ 向 $a,b$ 连边,之后如果 $b$ 还会参与反应,就用 $p$ 代替.
最后会连成一棵森林,考虑每对会产生沉淀的液体 $c_i,d_i$ 带来的贡献.
如果它们不在一棵树中,显然没有贡献.否则,这两种液体会在它们的 LCA 处形成沉淀(如果还有剩余).
需要考虑之前发生的反应的影响,将所有反应按照 LCA 深度为第一关键字,优先级为第二关键字排序,模拟即可.
时间复杂度 $O(n\log n+k\log k+k\log n)$ .
1 | //%std |