CodeForces 1396E. Distance Matching


題目簡述:給定一棵$n$($2 \leq n \leq 10^5$為偶數)個節點的樹,以及$1 \leq k \leq n^2$。要求找到完全匹配$f: [n] \to [n]$,使得距離之和

$$ S(f) = \frac 1 2 \sum_{i \in [n]} \mathit{dis}(i, f(i)) = k, $$

其中,$[n] = \{1, 2, \dots, n\}$,$\mathit{dis}(u, v)$表示節點$u$與節點$v$的距離。

這里,一個完全匹配$f: [n] \to [n]$應滿足:$f(f(i)) = i$且$f(i) \neq i$。

 

解:

這題思路類似於CodeForces 1280C. Jeremy Bearimy ,CodeForces 1387B2. Village (Maximum)AtCoder AGC 018 D. Tree and Hamilton Path

對每一條邊$e$,我們考慮經過其的匹配個數$\mathit{c}_e$。設這條邊將樹分成大小為$x_e$和$y_e$的兩個部分,令$z_e = \min\{x_e, y_e\}$,則

  1. 至少有$z_e \bmod 2$個匹配經過$e$;
  2. 至多有$z_e$個匹配經過$e$。

綜上,我們有$z_e \bmod 2 \leq c_e \leq z_e$。因此,

$$ \sum_e (z_e \bmod 2) \leq S(f) \leq \sum_e z_e. $$

另一方面,

$$ S(f) = \frac 1 2 \sum_{i \in [n]} \left( \mathit{depth}(i) + \mathit{depth}(f(i)) - 2 \mathit{depth}(\mathit{lca}(i, f(i))) \right) \equiv \sum_{i \in [n]} \mathit{depth}(i) \equiv \sum_{e} z_e \pmod 2, $$

其中$\mathit{depth}(u)$為節點$u$的深度(根節點深度為$0$),$\mathit{lca}(u, v)$表示節點$u$與節點$v$的最近公共祖先。

至此,我們得到了有解的必要條件,即$\sum_e (z_e \bmod 2) \leq k \leq \sum_e z_e$且$k \equiv \sum_e z_e \pmod 2$。接下來,我們證明這個條件也是充分的,即若$k$滿足條件,則必存在一個完全匹配$f$使得$S(f) = k$。

為方便描述,我們設當前樹為$T$,令$L(T) = \sum_e (z_e \bmod 2)$,$R(T) = \sum_e z_e$。則我們要證

命題:對任意樹$T$以及自然數$k$,若$L(T) \leq k \leq R(T)$且$L(T) \equiv R(T) \equiv k \pmod 2$,則必存在一個完全匹配$f: [n] \to [n]$,使得$S_T(f) = k$。

我們采用數學歸納法。

基礎:當$n = 2$時,樹的形態只有一種,完全匹配$f$也只有一種,並且這種情況下$k$只能$=1$,這種情況的正確性是顯然的。

歸納:假設$n = 2m-2 (m \geq 2)$時命題成立,考慮$n = 2m$。我們取樹的重心$G$(如有多個,則取任意其中之一),並以$G$為根建樹,我們注意到此時

$$L(T)  = \sum_{i \in [n] \setminus \{G\}} \mathit{size}(i) \bmod 2, $$

$$R(T) = \sum_{i \in [n] \setminus \{G\}} \mathit{size}(i),$$

其中$\mathit{depth}(u)$為節點$u$的深度(根節點深度為$0$),$\mathit{size}(u)$為節點$u$對應子樹的大小。

  1. 若$k = R(T)$,則直接求出樹的DFS序$r_i$(以任意節點為根的DFS序均可),應用移位技巧,將$r_i$與$r_{i+n/2}$匹配即可。
  2. 否則,我們取$G$的兒子$g$,使得$\mathit{size}(g)$最大(如有多個,則任取一個)。此時必有$\mathit{size}(g) \geq 2$(若不然,則$k = \sum_e z_e$,應是第一種情況)。我們取節點$w$為子樹$g$中深度最大且$\mathit{size}(w) \geq 2$的節點。
    2.1. 若$k+2\mathit{depth}(w) \leq R(T)$,則
        2.1.1. 若$w$有兩個以上兒子,任取其中兩個兒子$u$和$v$,則它們都是葉子節點。考慮將這兩個節點進行匹配並且從樹中刪除,設刪除$u$和$v$兩個葉子節點之后的樹為$T' = T_{u,v}$。此時,令$k' = k - \mathit{dis}(u, v) = k - \mathit{depth}(u) - \mathit{depth}(v) + 2\mathit{depth}(w) = k-2$。
        2.1.2. 否則,$w$恰好有一個兒子$u$。考慮將這兩個節點進行匹配並且從樹中刪除,設刪除$u$和$v$兩個葉子節點之后的樹為$T' = T_{w,u}$。此時,令$k' = k - \mathit{dis}(w, u) = k - \mathit{depth}(w) - \mathit{depth}(v) + 2\mathit{depth}(w) = k-1$。
    我們注意到,兩種情況得到的樹$T'$的重心仍然是$G$,並且問題化為節點數為$n' = n-2 = 2m-2$的問題,此時$k' \leq R(T')$。另一方面,
        2.1.1. $L(T') = L(T) - 2$;
        2.1.2. $L(T') = L(T) - 1$。
    因此,$L(T') \leq k' \leq R(T')$且易證$L(T') \equiv k' \pmod 2$。根據歸納假設,存在樹$T'$上的完全匹配$f'$,使得$S_{T'}(f') = k'$。
        2.1.1. $f = f' \cup \{(u, v)\}$;
        2.1.2. $f = f' \cup \{(w, u)\}$。
    即得$S_T(f) = k$。
    2.2. 否則,必存在一個子樹$g$中的非葉節點$u$,使得$k+2\mathit{depth}(u) = R(T)$。選取節點$u$的一個兒子$v$,並匹配$u$和$v$。對剩下的節點,我們求出它們的DFS序,並按照 Case 1 的方式應用移位技巧即可。

結論:命題成立。

 

現在考慮如何構造出具體的完全匹配。在歸納法證明中,Case 1 和 Case 2.2 是直接的;Case 2.1 中,由於每次刪掉的兩個節點不會影響樹的結構(甚至重心不變),我們可以以重心為根建樹模擬即可。時間復雜度為$O(n)$。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM