ABC328F 题解

blog。提供一个普通并查集 + 启发式合并做法。


考虑直接维护 \(X_i\)。对于 \(X_u-X_v=w\),分四种情况。

  • \(X_u,X_v\) 都没被维护过。直接钦定 \(X_u\gets w,X_v\gets0\),以后再改。
  • \(X_u\) 没被维护过,\(X_v\) 被维护过。显然 \(X_u\gets X_v+w\)
  • \(X_v\) 没被维护过,\(X_u\) 被维护过。显然 \(X_v\gets X_u-w\)
  • \(X_u\)\(X_v\) 都被维护过。将每次合法操作视作连边 \((u,v)\),这里实际上有两种情况。
    • \(u,v\) 在同一个连通块内。如果 \(X_u-X_v=w\) 那么是合法的。
    • \(u,v\) 不在同一个连通块内。其实这是必定合法的,本质是 \(X_v\gets X_u+w\),只不过 \(v\) 所在的连通块的所有元素的值已经被钦定过了。直接暴力修改 \(v\) 所在的连通块 的 \(X_i\) 值。(\(\#\)

上述做法是 \(O(qn)\) 的,瓶颈在 \(\#\) 处的暴力修改。将暴力修改替换为启发式合并即为 \(O(q\log n)\)

code,时间复杂度 \(O(q\log n)\)

posted @ 2023-11-12 10:35  liangbowen  阅读(19)  评论(0编辑  收藏  举报