當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
洛谷 - P4323 [JSOI2016]独特的树叶(树上哈希+换根dp)
生活随笔
收集整理的這篇文章主要介紹了
洛谷 - P4323 [JSOI2016]独特的树叶(树上哈希+换根dp)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:點擊查看
題目大意:給出一棵 n 個節點的樹 A ,再給出一棵 n + 1 個節點的樹 B,題目保證了樹 B 是樹 A 添加了一個葉子結點后的一棵樹,只不過編號的順序不同,現在問這個葉子節點是哪個節點,如果有多個滿足條件的節點,輸出編號最小的那個
題目分析:題目的意思是樹 B 去掉一個葉子節點后,與樹 A 同構,這樣我們可以先以點 1 為根節點,用樹上哈希 O( n ) 求出 dp1[ 1 ] 表示以點 1 為根節點時樹的哈希值,然后利用換根 dp ,O( n ) 求出 dp2[ x ] 表示以點 x 為根節點時樹的哈希值,同理處理一下樹 B ,當樹 B 中某個葉節點,滿足:除去這個葉節點后,剩下的樹 B 的任意一個節點,以其為根節點時的哈希值,在樹 A 中可以找到對應的值,就說明刪除掉該葉子節點后兩個樹是同構的,這里我們可以用 set 儲存一下樹 A 中 n 個節點的哈希值便于查找,隨后枚舉樹 B 中的葉子結點進行判斷即可
為了方便查找,我們可以對樹 B 上的每個葉子節點,取其父節點,根據樹上哈希的轉移方程 dp1[ u ] += dp1[ v ] * p[ sz[ v ] ] 可知,在去掉該葉子結點后,以其父節點為根節點時的哈希值為 dp2[ u ] - p[ 1 ] ,直接查找就好了
代碼:
?
?
總結
以上是生活随笔為你收集整理的洛谷 - P4323 [JSOI2016]独特的树叶(树上哈希+换根dp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CodeForces - 1252D F
- 下一篇: LOJ - #116. 有源汇有上下界最