ACM演算法總結 prufer序列

2021-10-08 23:51:53 字數 1453 閱讀 3414

prufer序列就是一一對應一棵無根樹的乙個序列。

對於一棵 n 個結點的無根樹,它的 prufer序列有 n-2 個數,它們之間相互轉換關係如下:

例如對於如下的一棵樹:

prufer序列主要用於涉及到樹的度數時的一些計數問題,它有一些重要的性質:

用 prufer序列處理樹的計數問題時,要始終明白 prufer序列和無根樹是一一對應的,可以用 prufer序列唯一地表示一棵樹。

比如這道例題 valuable forests :一棵無根樹的 value 為它所有結點的度數的平方和,乙個森林的 value 為它所有樹的 value 之和。現在給出 n 個結點,要求所有可能組成森林的 value 之和。

定義四個陣列 f,g,f,g,它們的意義如下:

那麼有如下四個式子成立:

這樣就可以計算出來了。

**:

#define din freopen("input.txt","r",stdin);

#define dout freopen("output.txt","w",stdout);

#include

#include

#define mem(a,b) memset(a,b,sizeof(a))

#define rep(i,a,b) for(int i=(a);i<=(int)(b);i++)

#define rep_(i,a,b) for(int i=(a);i>=(b);i--)

#define pb push_back

using

namespace std;

typedef

long

long ll;

typedef vector<

int> vi;

typedef pair p;

intread()

return flag?x:

-x;}

const

int maxn=

5005

,n=5000

;ll m;

ll f[maxn]

,g[maxn]

,f[maxn]

,g[maxn]

;ll jie[maxn]

,jie_[maxn]

;ll ksm

(ll x,ll n)

return ret;

}ll c

(ll n,ll m)

intmain()

rep(k,

1,n)

//g[0]=g[1]=1;

rep(k,

1,n)

while

(t--

)return0;

}

prufer序列複習小結

快要省選了。抽點時間複習一下東西 以免漏了一些東西 為了在省選之前覺得自己什麼都會 每一次選擇乙個編號最小,並且度數為1的點 把它刪掉 然後讓他唯一連向的點加入prufer序列 如果只有兩個點就結束 這個的話,你可以理解為有乙個陣列a 表示每乙個數在prufer裡面出現的次數 然後每一次,你就選出p...

Prufer序列相關

最近做到一些題,用到了prufer序列,挺有用的,在這裡學習一下。prufer數列是無根樹的一種數列,通過乙個prufer序列可以唯一表示一棵頂點帶標號的無根樹,點數為n的樹轉化來的prufer數列長度為n 2,它有很多的性質 一種生成prufer序列的方法是迭代刪點,直到原圖僅剩兩個點。對於一棵頂...

prufer 序列 學習筆記

上周五看了一下,發現不是很難,今天再看了一眼,把板題做了,順便看了另外一道 懶得碼了 其實很簡單,我們定義一顆無根樹的 prufer 序列為,欽定任意乙個點為根 方便確定父子關係 每次從葉子中選出乙個編號最小的點,把它的父親加入到 prufer 序列中,並刪掉該節點。不難看出,我們最後會有 n 2 ...