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...