BZOJ 1211 樹的計數

2021-09-24 11:58:56 字數 861 閱讀 9993

1.題目鏈結。這裡面細節挺多的,首先公式是:(n-2)!/(d1-1)!/(d2-1)!....其中d是每個點的度數。至於怎麼得到的,是根據無根樹的prufer序得到的,不懂得可以自行學習,挺簡單的。就是一種把無根樹對映到唯一的乙個序列,有一種拓撲排序的思想,但是這個序列對於乙個確定的無根樹是唯一的,就像身份證號一樣。知道了這些,在在計算組合數的時候,還是要處理一下,採用質因子分解計算。

#includeusing namespace std;

#define ll long long

#pragma warning(disable:4996)

const int maxn = 300;

int n;

ll d[maxn], prime[maxn];

int s[maxn];

void getprime() }}

ll qpow(ll a, ll b)

return res;

}int main()

if (n == 1 && d[1] != 0)

if (n > 1)for (int i = 1; i <= n; i++) }

if (sum - n != n - 2)

memset(s, 0, sizeof(s));

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

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

}} }

ll ans = 1;

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

printf("%lld\n", ans);

return 0;

}

bzoj1211 樹的計數 prufer編碼

prufer編碼大概就是將一顆無根樹對應到乙個序列裡面,然後構造就是不斷找最小的度數為1的點然後將他的father加進去。不難發現每個編號的出現次數就是deg 1 includeusing namespace std const int n 300 typedef long long ll ll a...

bzoj 1211 HNOI2004 樹的計數

題意 給出每個節點的度數,問有多少棵樹滿足這些度數。題解 pr fer序列 組合數學 pr fer序列是由標號樹產生的唯一數列。生成方法 一棵樹要得到普呂弗序列,方法是逐次去掉樹的頂點,直到剩下兩個頂點。考慮樹t,其頂點為。在第i步,去掉標號最小的葉,並把普呂弗序列的第i項設為這葉的鄰頂點的標號。序...

BZOJ 1211 HNOI2004 樹的計數

今天早上由於剩下的非許可權題實在是太難了。於是學了一下新東西續命。直接prufer序列排列組合就好了。注意各種0的情況 code include include typedef long long ll const ll n 155 ll n ll a n ll pri n ll tot ll cn...