Description
Bessie 有一个连通无向图 G。G 有 N 个编号为 1…N 的结点,以及 M 条边(2≤N≤105,N−1≤M≤2N2+N)。G 有可能包含自环(一个结点连到自身的边),但不包含重边(连接同一对结点的多条边)。
令 fG(a,b) 为一个布尔函数,对于每一个 1≤a≤N 和 0≤b,如果存在一条从结点 1 到结点 a 的路径恰好经过了 b 条边,则函数值为真,否则为假。如果一条边被经过了多次,则这条边会被计算相应的次数。
Elsie 想要复制 Bessie。具体地说,她想要构造一个无向图 G′,使得对于所有的 a 和 b,均有 fG′(a,b)=fG(a,b)。
Elsie 想要进行最少数量的工作,所以她想要构造最小可能的图。所以,你的工作是计算 G′ 的边数的最小可能值。
∑N≤105,∑M≤2×105。
Solution
首先对于每个人一定存在 (xi,yi),满足 fi,j=1 的条件为 j 为奇数且 j≥xi 或者 j 为偶数且 j≥yi。
那么现在可以先对于原图 G 跑 bfs 求出到每个点的奇偶最短路,得到 (xi,yi)。注意到这里的贡献是 xi+1→yj 和 yi+1→xj,不太美观,考虑将其变为 (ai,bi) 表示到 i 的最短路和与最短路奇偶性不同的最短路。
则一定满足 ai<bi 且 ai 和 bi 奇偶性不同。
此时对于 i,要贡献出 (ai,bi),就一定要满足 i 的邻域存在一个 aj=ai−1,且存在 ak=bi−1 或者 bk=bi−1。同时还需要满足所有与 i 相邻的 j 都有 ∣ai−aj∣≤1。所以 (ai,bi) 只会连如下边:
- (ai−1,bi−1)
- (ai−1,bi+1),(ai+1,bi−1)
可以证明这两种连边满足条件,且不存在其余更优的连法。
现在如果把 (ai,bi) 放到二维平面上,第一种相当于往左上方连边,第二种是同时往右上、左下连边。特别的,当 ai+1=bi 时第二种是往自己和左下连边。
注意到上面的连法可以按照 ai+bi 分层,如下图:

考虑对于同层内的点从左往右进行贪心,设 i 有 t 个点,cnt 表示 i−1 往 i 要连 cnt 条边。
如果 i 上方没有点,就只能连层内边,所以 ans←ans+max{t,cnt},cnt←t。
如果 i 上方有点,还要分两种情况讨论:
- 如果 t≥cnt,则 t 中要分 cnt 个点连左边,剩余的全连上面。
- 如果 t<cnt,则 t 个点全要连左边。
枚举到最后,如果在 (x,x+1) 剩余 cnt 个点要连右边,则一定是它们内部两两连边,即 ans←⌈2cnt⌉。
具体见代码。
时间复杂度:O(NlogN)。
Code