CF1010F Tree
生活随笔
收集整理的這篇文章主要介紹了
CF1010F Tree
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
真·毒瘤題
這個題面寫錯了一句話。要求的是每個節(jié)點的石子樹>=它的兩個兒子石子數的和。
首先考慮怎么算石子分配的方案。
如果對這棵樹每個節(jié)點的石子數都和兒子差分一下的話,可以唯一對應一顆每個點都要一個>=0的權值的樹。
且這棵樹的權值和為x。
那么就可以插板法算一下了,因此它與樹的結構無關,只與大小有關。
因此我們只需要對第一種操作算一下聯通塊大小為k的方案數即可。
直接dp是n^2的,過不了。
首先樹鏈剖分。
然后重鏈頭的dp值可以寫成一個多項式。
設a[n]為鏈上左兒子的dp值的生成函數*x。
ans[n]=1+a[n]×ans[n-1]=1+a[n]+a[n]a[n-1]+a[n]a[n-1]a[n-2].....
考慮怎么計算這個式子,大力分治乘法即可。
考慮一下這樣做的復雜度。
做一次這樣分治乘法的復雜度是size^log^2的,size為重鏈頭的子樹大小。
又因為使用了樹鏈剖分,每個點到根節(jié)點的路徑最多只會有l(wèi)ogn段重鏈,每個點只會向上貢獻logn次。
因此總復雜度O(nlog^3n)
轉載于:https://www.cnblogs.com/Creed-qwq/p/10452856.html
總結
以上是生活随笔為你收集整理的CF1010F Tree的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kafka auto.offset.re
- 下一篇: [转帖]oracle改版sql serv