洛谷P2290 樹的計數

2022-06-13 14:12:13 字數 843 閱讀 5072

乙個有 \(n\) 個節點的樹,設它的節點分別為 \(v_1,v_2,\ldots,v_n\),已知第 \(i\) 個節點 \(v_i\) 的度數為 \(d_i\),問滿足這樣的條件的不同的樹有多少棵。

\(1\le n\le 150\),保證滿足條件的樹不超過 \(10^\) 個。

既然點有了度數限制,那麼等價於 prufer 序列上這個點出現次數必須是 \(\mathrm_i-1\)。

問題轉化為乙個長度為 \(n-2\) 的序列,\(i\) 出現次數為 \(\mathrm_i-1\) 的方案數。顯然等於

\[\frac_(\mathrm_i-1)!}

\]由於題目保證了答案不超過 long long 範圍,那麼直接分解質因數最後再乘起來即可。

時間複雜度 \(o(n^2)\)。

#include using namespace std;

typedef long long ll;

const int n=155;

int n,deg[n],cnt[n][n],a[n];

ll ans;

int main()

} for (int j=1;j<=n;j++)

a[j]+=cnt[n-2][j];

for (int i=1;i<=n;i++)

if (deg[0]!=n-2) return printf("0"),0;

ans=1;

for (int i=1;i<=n;i++)

for (;a[i];a[i]--) ans*=i;

printf("%lld",ans);

return 0;

}

洛谷 P2290 HNOI2004 樹的計數

輸入格式 輸入檔案第一行是乙個正整數n,表示樹有n個結點。第二行有n個數,第i個數表示di,即樹的第i個結點的度數。其中1 n 150,輸入資料保證滿足條件的樹不超過10 17個。輸出格式 輸出滿足條件的樹有多少棵。輸入樣例 1 4 2 1 2 1 輸出樣例 1 2題解 質因數分解 prufer數列...

題解 P2290 HNOI2004 樹的計數

乙個有 n 個節點的樹,設它的節點分別為 v1,v2,v nv 1,v 2,ldots,v n v1 v2 vn 已知第 i 個節點 v iv i vi 的度數為 d id i di 問滿足這樣的條件的不同的樹有多少棵 有關樹的形態計數,考慮prufer序列 每個prufer序列對應乙個無根樹,如果...

洛谷p2602 數字計數

題目描述 給定兩個正整數a和b,求在 a,b 中的所有整數中,每個數碼 digit 各出現了多少次 一開始想歪了,想去列舉每一位,然後統計每一位的情況。轉念一想,數字dp是統計 a,b 內符合條件的數字的個數。換一種方法,對key 0,9 統計含1個key,2個key len len為數字的長度 個...