BZOJ1005--[HNOI2008]明明的煩惱(樹的prufer編碼)
阿新 • • 發佈:2017-11-06
data 我們 memory 滿足 允許 bsp logs 輸入 www
Submit: 5768 Solved: 2253
[Submit][Status][Discuss]
1
-1
-1
所以要求在n-2大小的數組中插入tot各序號,共有種插法;
在tot各序號排列中,插第一個節點的方法有種插法;
插第二個節點的方法有種插法;
.........
另外還有m各節點無度數限制,所以它們可任意排列在剩余的n-2-tot的空間中,排列方法總數為;
根據乘法原理:
然後就要高精度了.....但高精度除法太麻煩了,顯而易見的排列組合一定是整數,所以可以進行質因數分解,再做一下相加減。
關於n!質因數分解有兩種方法,第一種暴力分解,這裏著重講第二種。
若p為質數,則n!可分解為 一個數* ,其中且 <n
所以
關於prufer編碼:
http://www.matrix67.com/blog/archives/682#comment-9435
1005: [HNOI2008]明明的煩惱
Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 5768 Solved: 2253
[Submit][Status][Discuss]
Description
自從明明學了樹的結構,就對奇怪的樹產生了興趣......給出標號為1到N的點,以及某些點最終的度數,允許在
任意兩點間連線,可產生多少棵度數滿足要求的樹?
Input
第一行為N(0 < N < = 1000),
接下來N行,第i+1行給出第i個節點的度數Di,如果對度數不要求,則輸入-1
Output
一個整數,表示不同的滿足要求的樹的個數,無解輸出0
Sample Input
31
-1
-1
Sample Output
2HINT
兩棵樹分別為1-2-3;1-3-2
轉自怡紅公子(http://www.cnblogs.com/noip/archive/2013/03/10/2952520.html)----
該題運用到了樹的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為無限制度數的節點數。 則
BZOJ1005--[HNOI2008]明明的煩惱(樹的prufer編碼)