題目大意:
有\(n\)的點,每個點有乙個權值\(d_i\),表示這個點上有多少個孔。你可以連線\(n-1\)條邊,每條邊可以連線分別屬於兩個點的兩個孔。乙個孔不能連兩條邊。要求最後這樣使這\(n\)個聯通,即找到完全圖的乙個生成樹。
來自於prufer序列的乙個結論:在完全圖中,如果\(n\)個點的度數分別為\(d_1,d_2,\cdots,d_n\),那麼滿足這種條件的生成樹個數是
\[\frac^n(d_k-1)!}
\]吸收/提取恒等式:
\[\binom=\frac\binom
\]考慮在最後的一種生成樹中,\(n\)個點的度數分別為\(d_1,d_2,\cdots,d_n\)。因為每個點在選擇要連線的孔時是有序的,則這種方案的貢獻是:
\[\frac^n(d_k-1)!}\prod_^n\binomd_k!
\]注意到\(\sum\limits_^nd_k=2(n-1)\),所以事實上,我們可以構造出乙個卷積來求答案\(s\)。
\[ans=(n-2)![x^]\prod_^nf_k(x)
\]\[\begin
f_t(x)&=\sum_^\infty\binom\fracx^k\\
&=\sum_^\infty\binomk x^k\\
&=\sum_^\infty\binomd_tx^k\\
&=d_t\sum_^\infty\binomx^\\
&=d_tx\sum_^\infty\binomx^k\\
&=d_tx(1+x)^
\end
\]記\(s\)為所有\(d\)的和,\(t\)為所有\(d\)的積,我們有:
\[\begin
ans&=(n-2)![x^]\prod_^nd_kx(1+x)^\\
&=(n-2)![x^]tx^n(1+x)^\\
&=(n-2)!t[x^](1+x)^\\
&=(n-2)!t\binom\\
&=t(s-n)^\underline
\\\end
\]問題解決。時間複雜度\(o(n)\)
#includeusing namespace std;
typedef long long ll;
const ll mod=998244353;
int n;
ll sn,ans=1;
inline ll add(ll a,ll b)
inline ll mul(ll a,ll b)
int main()
for(int i=0;iprintf("%lld\n",ans);
}
arc 逆尤拉函式
由phi n n 1 1 p1 1 1 p2 1 1 pt 得n p1 p2 pt phi n p1 1 p2 1 pt 1 列舉質數,把phi n 除完,把括號裡的搞成1,最後的n就等於質數相乘。二需要特判,你可以除無限二,前面也可以乘無限二 但標程不對,沒分解 2的,所以我把return挪後了 ...
生成函式與指數生成函式
普通型生成函式gf 序列 的生成函式為 sum limits a ix i 常用gf的收斂形式 1.sum limits x i frac 序列 的生成函式 2.sum limits binomx i 1 x n 序列 的生成函式,就是二項式定理 3.sum limits binomx i frac...
生成函式 母函式
根據定義,這個序列作為函式的係數,稱g x 就是序列的母函式。和一般意義上的函式相比,母函式的功能是計數。有這樣一道例題 到這一章為止,已知的計數法則就兩種,加法法則 或 和乘法法則 且 前者是分類思想,後者是分步。法1 分步來看,第乙個骰子有1 5種可能,因為兩個骰子之和是6,所以一旦第乙個骰子確...