樹形dp
題目
給定一個簡單無向連通圖,問有多少種加邊方案使得這個圖變成簡單仙人掌。
分析
首先找到一棵生成樹,考慮其它非樹邊所對應的樹的路徑上的邊最多隻能用一次,
這可以用樹上差分做,如果一個點到其父節點的邊被用了多次就一定無解。
否則沒有被用過的部分将形成若幹棵樹,方案就是它們的乘積。
等于說問用若幹條路徑覆寫一棵樹的方案。
設 \(dp[x]\) 表示以 \(x\) 為根的子樹的方案數。
隻需要考慮 \(x\) 的鄰邊如何連接配接,子樹的答案直接相乘。
設 \(f[n]\) 表示 \(n\) 條邊任意比對的方案數,則
\(f[n]=f[n-2]*(n-1)+f[n-1]\)
那麼 \(dp[x]*=f[deg[x]]\)
代碼