Prufer序列相关
最近做到一些題,用到了Prufer序列,挺有用的,在這里學習一下。
描述
Prufer數列是無根樹的一種數列,通過一個Prufer序列可以唯一表示一棵頂點帶標號的無根樹,點數為n的樹轉化來的Prufer數列長度為n-2,它有很多的性質
求法
一種生成Prufer序列的方法是迭代刪點,直到原圖僅剩兩個點。對于一棵頂點已經經過編號的樹T,頂點的編號為{1,2,…,n},在第i步時,移去所有葉子節點(度為1的頂點)中標號最小的頂點和相連的邊,并把與它相鄰的點的編號加入Prufer序列中,重復以上步驟直到原圖僅剩2個頂點
可以發現,對于一棵帶標號的無根樹的Prufer序列是唯一的
轉回
現在有一個prufer序列,如何推回原本的無根樹呢?
考慮對于初始的點集1~n,根據生成的方式可以得知,第一個刪掉的點在之后一定不會出現,而未出現的點都是一開始度數為1的,所以說,第一個被刪除的點的編號是所有開始未出現的點中編號最小的,刪除一個點后就可以轉化為子問題了,直到昨晚n-2次,此時對未被刪除的剩下兩個點連上一條邊,就把原樹構造出來了
容易發現,一個Prufer序列對應著唯一的一個帶標號的無根樹
作用
比如,現在有一棵nnn個節點的樹,給定每個節點的度數,求樹可能形態數,答案為:(n?2)!∏i=1n(di?1)!\frac{(n-2)!}{\prod_{i=1}^n(d_i-1)!}∏i=1n?(di??1)!(n?2)!?
然后如果有些節點如果不確定度數也可以做
例題:[HNOI2008][bzoj1005]明明的煩惱(咕咕咕咕咕)
待upd
總結
以上是生活随笔為你收集整理的Prufer序列相关的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手写vector
- 下一篇: [Snoi2017]炸弹