傳送門
\(prufer\) 序列入門題。。。
首先特判掉 \(n = 1\) 的情況:度數為 \(0\) 則有唯一解,否則無解。
然後特判掉總度數不為 \(2(n - 1)\) 的情況:無解。
再特判一下出現度數為 \(0\) 的點,也就是樹不連通的情況。
特判掉這些之後,就可以直接套公式了。。。
\[ans = \frac ^ n(d_i - 1)!}
\]如果不想用組合數來簡化式子的話就直接 rush 高精吧
#include #include using namespace std;
int n, d[233];
struct biginteger
biginteger clean()
biginteger operator = (int x)
biginteger operator * (const int& x)
biginteger operator / (const int& x)
return this -> clean();
}void output()
} ans;
int main()
if (sum != 2 * n - 2)
for (int i = 1; i <= n; ++i)
if (d[i] == 0)
ans = 1;
for (int i = 1; i <= n - 2; ++i) ans = ans * i;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= d[i] - 1; ++j) ans = ans / j;
ans.output();
return 0;
}
HNOI2004 樹的計數
hnoi2004 樹的計數 這道題資料水的一匹我無話可說,謎之錯誤 陣列賦值的時候乙個下標寫錯了變數 居然只wa了一組。寫這道題關鍵需要知道prufer序列以及cayley定理。prufer數列,可以用來解一些關於無根樹計數的問題。prufer數列是一種無根樹的編碼表示,對於一棵n個節點帶編號的無根...
HNOI 2004 樹的計數 題解
題目傳送門 題目大意 有一棵由 n nn 個點組成的樹,其中 d i d i d i 表示第 i ii 個點的度為 d i d i d i 問有多少棵滿足要求的樹。c ay le ycayley cayley 公式的一種應用。如果不會請點這裡 套乙個高精度板子即可,但是還要判無解的情況。直接上 in...
Hnoi2004 金屬包裹
傳送門 三維凸包模板題 只是聽了聽計算幾何的課之後心血來潮想寫的 我的做法很無腦是吧 暴力列舉三個點組成的三角形,然後列舉剩下的點,判斷其餘點是否都在這個三角形的同一側,是的話則說明這個三角形是凸包的乙個面。理論複雜度應該是 o n 4 不過看上去跑得飛快?人帥自帶小常數哈哈 這個故事告訴我們 大力...