洛谷P1395 會議
【題意】:
- 給定一棵無根樹,定義 u 到 v 的距離爲簡單路徑 (u,v) 上的邊的數量。我們把它記爲 Tu,v。
- 定義以 u 爲該無根樹時的花費爲 i=1∑nTu,i。即所有點到根 u 的距離和。我們把它記爲 Gu。
- 求一個點 u,使得 Gu 最小。輸出 u 和 Gu。如有多解,則輸出最小的 u。
- 對於 100% 的數據,1≤n≤5×104。
【思路】:
對於無根樹類的題目,我們可以先指定一個點當作根。然後再考慮。
具體地,我們先求出以 1 爲根時以每個點 u 爲根的子樹的大小 fu 及 G1。
考慮根從點 u 轉移到它的一個兒子 v 時總花費的變化量。可以發現,有等量關係 Gv=Gu−fv+(n−fv)。
什麼意思?即 v 的所有兒子到根的距離都減少了 1,但是所有不是 v 的兒子到根的距離都增加了 1。我們可以根據這個來算出所有的 G。可以配圖理解 (圖醜請原諒)。
總的時間複雜度爲 O(n)。可以通過更大的數據(比如 1×106)。
【代碼】: