無根樹轉有根樹

2021-08-29 09:38:40 字數 551 閱讀 7783

乙個n(n<=1000000)個結點的無根樹的各條邊,並指定乙個根結點,要求把樹轉化為有根樹。

輸入:結點的數目n,無根樹的各條邊,輸入乙個根結點號。

輸出:各個結點的父親編號。

執行結果:

演算法實現:

為方便起見,我們用了stl中的vector來儲存邊,g[u]表示u結點的相鄰結點的編號。

樹的儲存結構定義:

vectorg[maxn];  //鄰接矩陣表示

int p[maxn], n; //結點i個父節點編號 結點數目

輸入樹:

void read_tree()

}

遞迴轉化以u為根的子樹,u的父結點為fa.

void dfs(int u, int fa) //遞迴轉化以u為根的子樹,u的父結點為fa

}

無根樹轉有根樹

輸入乙個n個節點的無根樹的各條邊,並指定乙個根節點,要求把該樹轉化為有根樹,輸出各個節點的父節點編號。樹是一種特殊的圖,因此可以使用鄰接矩陣來表示。如果使用二維陣列來儲存鄰接矩陣,則需要o n2 個元素的空間,因此改用vector陣列。從根節點開始對樹進行dfs。遍歷到每個節點時,使用陣列p來儲存該...

無根樹轉有根樹

1 include 2 include 3 include 4 include 5 include 6 include 7 include 8 include 9 include 10 include 11 define maxn 1000000 10 12 define inf 100000000...

(無根樹轉有根樹)吝嗇的國度

nyoj 吝嗇的國度 20 一道經典的無根樹轉有根樹模板題。模板 include include using namespace std const int maxn 1000 int n,p maxn vectorg maxn 第一種dfs寫法 不需要對對p進行memset void dfs in...