在寫跟樹有關的競程題目時,我們常常會需要求出一棵有根樹的「深度陣列」,要怎麼定義什麼是深度陣列呢?首先,給定一棵樹,你需要選定一個根 $r$,接著,你會生成一個陣列 $d$,滿足
$$
d_i = \text{dis}(r, i)
$$
其中 $\text{dis}(u, v)$ 是 $u$ 到 $v$ 在樹上的最短路徑。
現在,給你一棵樹和一個不符合深度陣列定義的陣列 $d_1, d_2, \ldots, d_N$,你要求出你最少要修改幾個數字,才能讓這個陣列成為某個根 $r$ 的深度陣列。
換句話說,令 $f(r)$ 代表以 $r$ 為根的深度陣列中,$d_i \neq \text{dis}(r, i)$ 的 $i$ 個數,求
$$
\min_{1\leq r\leq N} f(r)
$$
輸入首行會有一個正整數 $N$,代表樹的節點數量。
次行會有一個長度為 $N$ 的整數陣列 $d_1, d_2, \ldots, d_N$,代表需要被修改的陣列。
接下來 $N-1$ 行,第 $i$ 行兩個正整數 $u_i, v_i$,代表第 $i$ 邊連接著的兩個節點編號為 $u_i, v_i$。
輸出一個整數,代表最少需要修改的位置數量。
5 1 2 3 2 1 1 4 2 3 3 5 4 5
3
7 4 3 1 5 2 2 3 6 1 7 3 1 7 6 2 2 4 1 5
3
| No. | Testdata Range | Constraints | Score |
|---|---|---|---|
| 1 | 0~1 | 範例測資。 | 0 |
| 2 | 0~47 | 無特別限制。 | 100 |