【并查集、二分图匹配】ABC434E

· · 题解

【并查集、二分图匹配】ABC434E

原题链接

简要题意

n 只兔子,第 i 只兔子初始位于坐标 X_i,其跳跃能力为 R_i。每只兔子必须跳跃一次,可以跳到 X_i - R_iX_i + R_i

求所有兔子跳跃后,最终占据的不同坐标数量的最大值。

## 思路 ### 1. 二分图匹配模型 我们可以将这个问题建模为**二分图最大匹配**: - **左侧点集**:$n$ 只兔子。 - **右侧点集**:所有可能的跳跃坐标(即所有的 $X_i - R_i$ 和 $X_i + R_i$,需离散化)。 - **边**:每只兔子向它能到达的两个坐标连边。 由于 $n = 2 \times 10^5$,右侧点数最多 $2n$,虽然理论复杂度 $O(E\sqrt{V})$ 在单位容量网络下表现优秀(Dinic 实测约 670ms 可过),但我们仍有更优雅的 $O(n \alpha(n))$ 解法。 ### 2. 图论结构转化(并查集优化) 由于每只兔子(边)恰好连接两个坐标(点),我们可以将左侧的兔子视为连接两个右侧坐标点的**边**。 这样,问题转化为:在一个由坐标点作为顶点、兔子作为边组成的图中,**为每条边指定一个端点**,使得被指定的不同端点数最大。 对于图中的每一个**连通分量**,设其点数为 $V$,边数为 $E$: - **若该分量是一棵树** ($E = V - 1$):由于边数少于点数,最多只能占领 $E$ 个点(即 $V-1$ 个点)。 - **若该分量包含环** ($E \ge V$):根据基环树或更复杂图的性质,我们总能通过定向使得该分量的所有 $V$ 个顶点都被占领。 因此,每个连通分量的贡献为 $\min(V, E)$。最终答案即为所有连通分量贡献的总和: $$\sum \min(V_{\text{component}}, E_{\text{component}})$$ 利用并查集可以在扫描兔子的同时,动态维护每个连通分量的点数和边数,实现复杂度极低。