#LAISIR27. 部族會議的中心

部族會議的中心

🧮 題目名稱:部族會議的中心

📝 題目背景:

在遙遠的伊爾部族,每年都會召開一次盛大的部族會議,屆時所有村莊的代表都需趕赴會場。為了使交通成本最小,長老們希望將會場設在某個村莊,使得當這個村莊被視為中心後,其餘所有分支部落分裂成的子部族中最大的一支也不會過於龐大,以避免偏遠地區過度擁擠。

這個「理想的村莊」就被稱為部族重心

🎯 任務說明:

給定一棵以村莊為節點的無根樹,請你找出其中一個重心節點,使得移除此節點後剩餘所有子樹中節點最多的一棵,其大小不超過整體節點數的一半

若有多個節點皆滿足條件,請輸出編號最小的那一個。


📥 輸入格式:

n
a₁ b₁
a₂ b₂
...
aₙ₋₁ bₙ₋₁
  • n 表示村莊總數(即樹中節點總數)。
  • 接下來 n - 1 行,每行兩個整數 aᵢbᵢ,表示村莊 aᵢ 與村莊 bᵢ 之間有一條道路連接。

📤 輸出格式:

一行,一個整數,表示重心節點的編號(若有多個,輸出編號最小者)。


📊 資料範圍:

  • 1 ≤ n ≤ 10⁵
  • 1 ≤ aᵢ, bᵢ ≤ n
  • 保證輸入構成一棵樹(即連通且無環)

📘 輸入範例:

9
1 2
1 3
2 4
2 5
3 6
3 7
6 8
6 9

📗 輸出範例:

3

💡 範例說明:

以節點 3 為中心時,刪除節點 3 會將整棵樹分成三部分,分別是:

  • 子樹包含節點 1, 2, 4, 5(大小為 5)
  • 子樹包含節點 6, 8, 9(大小為 3)
  • 子樹包含節點 7(大小為 1)

最大子樹大小為 5,不超過總數的一半(即 4.5),因此 3 是符合條件的節點之一。