自從明明學了樹的結構,就對奇怪的樹產生了興趣...... 給出標號為1到n的點,以及某些點最終的度數,允許在任意兩點間連線,可產生多少棵度數滿足要求的樹?
第一行為n(0 < n < = 1000),接下來n行,第i+1行給出第i個節點的度數di,如果對度數不要求,則輸入-1
乙個整數,表示不同的滿足要求的樹的個數,無解輸出031
-1-1
2兩棵樹分別為1-2-3;1-3-2
該題運用到了樹的prufer編碼的性質:
(1)樹的prufer編碼的實現
不斷 刪除樹中度數為1的最小序號的點,並輸出與其相連的節點的序號 直至樹中只有兩個節點
(2)通過觀察我們可以發現
任意一棵n節點的樹都可唯一的用長度為n-2的prufer編碼表示
度數為m的節點的序號在prufer編碼**現的次數為m-1
(3)怎樣將prufer編碼還原為一棵樹??
從prufer編碼的最前端開始掃瞄節點,設該節點序號為 u ,尋找不在prufer編碼的最小序號且沒有被標記的節點 v ,連線 u,v,並標記v,將u從prufer編碼中刪除。掃瞄下一節點。
該題需要將樹轉化為prufer編碼:
n為樹的節點數,d[ ]為各節點的度數,m為無限制度數的節點數。
則
所以要求在n-2大小的陣列中插入tot各序號,共有
種插法;
在tot各序號排列中,插第乙個節點的方法有
種插法;
插第二個節點的方法有
種插法;
………另外還有m各節點無度數限制,所以它們可任意排列在剩餘的n-2-tot的空間中,排列方法總數為
;根據乘法原理:
然後就要高精度了…..但高精度除法太麻煩了,顯而易見的排列組合一定是整數,所以可以進行質因數分解,再做一下相加減。
關於n!質因數分解有兩種方法,第一種暴力分解,這裡著重講第二種。
若p為質數,則n!可分解為 乙個數*
,其中
且所以——**怡紅公子
1 #include 2 #include 3 #include 4bzoj1005struct
bignum
13if (l == 0) l = 1;14
}1516void mul(int
k) while (a[t] >= 10000
);26}27
while (a[l + 1] > 0) l++;28}
2930
void
print()
36};
37int n, m = 0, tot = 0, d[1001], prime[1001], cnt[1001
];38
39bool judge(int
k) 44
45void makelist(int
n) 50
51void compute(int k, int
t) 58 cnt[i] += x *t;59}
60}6162
intmain()
7172
makelist(n);
73 memset(cnt, 0, sizeof
(cnt));
74 compute(n - 2, 1
);75 compute(n - 2 - tot, -1
);76
for (int i = 1; i <= n; i++)
77if (d[i] != -1) compute(d[i] - 1, -1
);78
79 bignum ans = 1;80
for (int i = 1; i <= prime[0]; i++)
81for (int j = 1; j <= cnt[i]; j++)
82ans.mul(prime[i]);
83for (int i = 1; i <= n - 2 - tot; i++)
84ans.mul(m);
85ans.print();
86return0;
87 }
狡猾的商人 bzoj1202,HNOI2005
ac通道 分析 因為每月的總收入可以為正,也可以為負,所以要比較兩個區間是否相符,當且僅當它們邊界都相同時才能比較。我們設w i 表示第1 i個月的總收入與第1 fa i 1 個月的總收入之差,及第fa i i個月的總收入。如圖。若i 1,j在同乙個集合中,則第i j個月的總收入為w j w i 1...
bzoj1005 hnoi2008 明明的煩惱
time limit 1 sec memory limit 162 mb submit 3157 solved 1262 submit status discuss 自從明明學了樹的結構,就對奇怪的樹產生了興趣.給出標號為1到n的點,以及某些點最終的度數,允許在任意兩點間連線,可產生多少棵度數滿足要...
BZOJ 1005 HNOI2008 明明的煩惱
給定一棵n個節點的樹的節點的度數,其中一些度數無限制,求可以生成多少種樹。用到了prufer數列的知識。度娘 prufer數列 是由有乙個對於頂點標過號的樹 標號樹 轉化來的數列,點數為n的樹轉化來的prufer數列長度為n 2。由heinz prufer於1918年在證明cayley定理時首次提出...