【动态规划】cf1034C. Region Separation
?質(zhì)因數(shù)分解套路的復(fù)雜度分析的動態(tài)規(guī)劃
題目大意
有一顆$n$個(gè)節(jié)點(diǎn)有點(diǎn)權(quán)的樹,初始整棵樹為$1$號區(qū)域,要求滿足下列規(guī)則:
- 除非$i$是最后一個(gè)等級,否則每一個(gè)$i$級區(qū)域都要被分成至少兩個(gè)$i+1$級區(qū)域
- 對于每種等級,每個(gè)點(diǎn)必須恰好屬于一個(gè)區(qū)域
- 一個(gè)區(qū)域的點(diǎn)集必須是連通的
- 對于相同等級,每個(gè)區(qū)域必須擁有相同的點(diǎn)權(quán)和
問有多少種合法的劃分方案,$n \le 10^6,a_i \le 10^9$.
題目分析
首先考慮判斷把樹分為$k$個(gè)2級區(qū)域的合法性$f_k$,記點(diǎn)權(quán)和為$tot$。
一種樸素的想法就是對于每一個(gè)$k$,自底向上遍歷整棵樹,若剩余子樹大小恰好為$tot\over k$,就割去這顆子樹;如果整棵樹能夠被處理完,$k$就是合法的。每次判定復(fù)雜度為$O(n)$.
注意到這個(gè)想法里,每次割去子樹的大小$s_i$恰好是$tot\over k$的倍數(shù);并且不難發(fā)現(xiàn),$k$合法的充要條件就是恰有$k$個(gè)$s_i≡0(\text{mod }\frac{tot}{k})$。簡短解釋一下:對于一顆$s_i≡0(\text{mod }\frac{tot}{k})$的子樹,由于它的所有子樹都奉行割去$s_j≡0(\text{mod }\frac{tot}{k})$的原則,那么剩下的包括點(diǎn)$i$的連通塊就是$i$子樹內(nèi)最小的$\ge {tot\over k}$的連通塊。因此,$\sum [s_k≡0(\text{mod }\frac{tot}{k})] \le k$;并且當(dāng)且僅當(dāng)$=k$時(shí)合法。
有了這個(gè)性質(zhì),考慮如何統(tǒng)計(jì)$f_k$。容易發(fā)現(xiàn)對于合法的$k$,$\frac{tot}{k}$的任意約數(shù)$k'$都是合法的。而對于子樹$s_i$,其最小有貢獻(xiàn)的$k=\frac{tot}{\text{gcd}(s_i,tot)}$。所以這里只需要對每個(gè)$s_i$存下最小的合法$k$,再以質(zhì)因數(shù)分解題的套路處理一遍就能算出$[f_k=k]$了。因此處理$f_k$的復(fù)雜度是$O(n\ln n)$。
接下去考慮dp計(jì)算把整棵樹分為若干個(gè)$i$級區(qū)域的方案數(shù)$g_i$。
轉(zhuǎn)載于:https://www.cnblogs.com/antiquality/p/10692714.html
總結(jié)
以上是生活随笔為你收集整理的【动态规划】cf1034C. Region Separation的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: doip 源码_DoIP—协议框架
- 下一篇: 什么从什么写短句_从什么到从什么造句