旅游(树形dp求树的最大独立集)
鏈接:https://ac.nowcoder.com/acm/problem/15748
來源:牛客網
題目描述
Cwbc和XHRlyb生活在s市,這天他們打算一起出去旅游。
旅行地圖上有n個城市,它們之間通過n-1條道路聯通。
Cwbc和XHRlyb第一天會在s市住宿,并游覽與它距離不超過1的所有城市,之后的每天會選擇一個城市住宿,然后游覽與它距離不超過1的所有城市。
他們不想住在一個已經瀏覽過的城市,又想盡可能多的延長旅行時間。
XHRlyb想知道她與Cwbc最多能度過多少天的時光呢?
聰明的你在仔細閱讀題目后,一定可以順利的解決這個問題!
輸入描述:
第一行,兩個正整數n和s,表示城市個數和第一天住宿的城市s。
接下來n-1行,每行兩個整數x和y,表示城市x與城市y之間有一條雙向道路。
輸出描述:
第一行,一個非負整數表示答案。
示例1
輸入
復制
4 1
1 2
2 3
3 4
輸出
復制
2
說明
第一天,在1號城市住宿,游覽了1、2號城市。
第二天,在3號城市住宿,游覽了4號城市,旅行結束。
備注:
1 ≤ n ≤ 500000, 1 ≤ s, x, y ≤ n。
算是樹的最大獨立集的一個模板題。
樹的最大獨立集,就是這樣的一個集合,這些集合里面的點在樹中互不相鄰。
那么對于樹中的每個節點就有兩種狀態,在最大獨立集里面或者不在最大獨立集里面。
狀態轉移方程:
如果這個點在獨立集里面:dp[u][1]+=dp[to][0] (兒子節點一定不在最大獨立集里面)
如果這個點不在獨立集里面:dp[u][0]+=max(dp[to][1],dp[to][0])(兒子的兩種狀態取最優狀態)。
這個題給定了一開始必須住的那一個城市,所以那一個城市一定在最大獨立集里面。
代碼如下:
努力加油a啊,(o)/~
總結
以上是生活随笔為你收集整理的旅游(树形dp求树的最大独立集)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [HAOI2015]树上染色(树形dp,
- 下一篇: [HNOI2003]消防局的设立(贪心)