1 #include 2 #include 3 #include 4 #include 5 #include6 #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...