已知度數的節點可能的組合方式如下
(n-2)!/(d1-1)!/(d2-1)!/…/(dk-1)!/left!
乙個乙個編號去放,對於第乙個確定度數的編號可以有c(n-2,d1-1)種放法,第二個c(n-2-(d1-1),d2-1)。。。寫出來後發現可以約一些階乘。
剩餘left個位置由未知度數的節點隨意填補,方案數為m^left
於是最後有
ans=(n-2)!/(d1-1)!/(d2-1)!/…/(dk-1)!/left! * m^left
注意特判n=1和n=2的情況。
#include
#include
#include
using
namespace
std;
const
int maxn = 1000;
int answ[maxn+10], prime[maxn+10], t[maxn*10+10], d[maxn+10];
bool notprime[maxn+10];
void getprime(int max)
}}void add(int u, int m)
}}int main()else
}t1 = n-2;
for(int i=1;i<=t1;i++)
add(i, 1);
if(n == 1)
if(n == 2)
if(flag)
t1 = n-2-sum;
for(int i=1;i<=t1;i++)
add(i, -1);
add(n-cnt, n-2-sum);
t[0] = t[1] = 1;
for(int i=1;i<=prime[0];i++)
while(t[t[0]] >= 10)}}
for(int i=t[0];i;i--)
printf("%d", t[i]);
printf("\n");
return
0;}
bzoj1005 prufer 明明的煩惱
1005 hnoi2008 明明的煩惱 time limit 1 sec memory limit 162 mb submit 6358 solved 2471 submit status discuss description 自從明明學了樹的結構,就對奇怪的樹產生了興趣 給出標號為1到n的點,以...
BZOJ 1430 小猴打架 prufer編碼
prufer編碼和無根樹的轉化問題 樹化prufer 在葉子節點中尋找編號最小的節點,將與之相連的父節點加入prufer佇列裡,然後刪去該葉子節點,直至圖中只剩下2個節點,於是prufer數列共有n 2位 於是對於乙個完全圖求生成樹的個數,他的prufer序列裡有 n 2 位,每一位均可取1 n,於...
bzoj1211 樹的計數 prufer編碼
prufer編碼大概就是將一顆無根樹對應到乙個序列裡面,然後構造就是不斷找最小的度數為1的點然後將他的father加進去。不難發現每個編號的出現次數就是deg 1 includeusing namespace std const int n 300 typedef long long ll ll a...