Prufer序列相關

2021-08-20 22:27:40 字數 791 閱讀 6500

最近做到一些題,用到了prufer序列,挺有用的,在這裡學習一下。

prufer數列是無根樹的一種數列,通過乙個prufer序列可以唯一表示一棵頂點帶標號的無根樹,點數為n的樹轉化來的prufer數列長度為n-2,它有很多的性質

一種生成prufer序列的方法是迭代刪點,直到原圖僅剩兩個點。對於一棵頂點已經經過編號的樹t,頂點的編號為,在第i步時,移去所有葉子節點(度為1的頂點)中標號最小的頂點和相連的邊,並把與它相鄰的點的編號加入prufer序列中,重複以上步驟直到原圖僅剩2個頂點

可以發現,對於一棵帶標號的無根樹的prufer序列是唯一的

現在有乙個prufer序列,如何推回原本的無根樹呢?

考慮對於初始的點集1~n,根據生成的方式可以得知,第乙個刪掉的點在之後一定不會出現,而未出現的點都是一開始度數為1的,所以說,第乙個被刪除的點的編號是所有開始未出現的點中編號最小的,刪除乙個點後就可以轉化為子問題了,直到昨晚n-2次,此時對未被刪除的剩下兩個點連上一條邊,就把原樹構造出來了

容易發現,乙個prufer序列對應著唯一的乙個帶標號的無根樹

比如,現在有一棵n

nn個節點的樹,給定每個節點的度數,求樹可能形態數,答案為:(n−

2)!∏

i=1n

(di−

1)

!\frac^n(d_i-1)!}

∏i=1n​

(di​

−1)!

(n−2

)!​然後如果有些節點如果不確定度數也可以做

例題:[hnoi2008][bzoj1005]明明的煩惱(咕咕咕咕咕)

待upd

最長子序列相關

在 程式設計之美 看到這樣的題 求連續子串行和最大 int longmaxarraycount int data,int n tempone 0 i return targe 變形1 n個整數,求其中任意n 1個數的乘積中的最大的乙個,不能用除法。n個數的乘積為p 1 p的值為正,則除去乙個最小的正...

DNA序列相關特徵

通常是指基因序列或蛋白質序列上連續的k個核苷酸或者氨基酸。在 基於遺傳演算法的加權整合學習及其對於pirna的 中通過統計所有k元組在pirna序列上出現的次數作為最後的特徵向量。定義dna序列為x,以k個字元長度為乙個單位在序列上進行掃瞄,然後統計出所有連續k元組出現的次數。最後將4的k次方個統計...

動態規劃 單調子串行相關

我們要區分一下子序列和子串。簡單的來講就是子串行是可以不連續但必須保證與給定的原陣列相同的順序,子串就是必須連續並且保證與給定的原陣列順序相同。我們討論的主要是子串行。ac code include include include include using namespace std const ...