無根樹轉有根樹

2022-02-20 03:22:23 字數 1366 閱讀 8084

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 1000000000

13#define eps 10e-6

14#define ll long long

15using

namespace

std;

1617

bool cmp(int a, int

b)18

2122

//*******無根樹轉為指定節點為根的有根樹並輸出每個節點的父親節點***************************

2324 vector mp[maxn]; //

*****鄰接表儲存圖

25int pre[maxn]; //

*****儲存每個節點的父親節點

2627

void dfs(int u, int fa) //

***形參分別表示當前節點和其父親節點

2837}38

}3940int main(void)41

52int

root;

53 cin >> root; //

****輸入目標根節點

54 pre[root]=-1; //

****根節點沒有父親節點

55 dfs(root, -1

);56

for(int i=0; i)

5762

}63 cout <64return0;

65}6667

/***************************

68輸入樣例:698

700 1

710 2

720 3

731 4

741 5

755 6

765 7771

78//*****************

79輸出樣例:

801 0 0 1 1 5 5

81//*****************

82即0節點的父親節點為1;

832,3節點的父親節點為0;

844,5節點的父親節點為1;

857,8節點的父親節點為5;

86******************************

*///******劉汝佳演算法競賽入門經典p197**

無根樹轉有根樹

乙個n n 1000000 個結點的無根樹的各條邊,並指定乙個根結點,要求把樹轉化為有根樹。輸入 結點的數目n,無根樹的各條邊,輸入乙個根結點號。輸出 各個結點的父親編號。執行結果 演算法實現 為方便起見,我們用了stl中的vector來儲存邊,g u 表示u結點的相鄰結點的編號。樹的儲存結構定義 ...

無根樹轉有根樹

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

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

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