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

2021-08-28 08:32:08 字數 1236 閱讀 3018

nyoj-吝嗇的國度-20

一道經典的無根樹轉有根樹模板題。

模板:

#include #include using namespace std;

const int maxn = 1000;

int n, p[maxn];

vectorg[maxn];

//第一種dfs寫法:

//不需要對對p進行memset;

void dfs(int u, int fa)

}//第二種dfs寫法:用pre代替p;

//之前要對pre[maxn] 進行 memset(pre,0,sizeof(pre));

void dfs(int s)

}int main()

int root;

cin >> root; //指定根節點。

p[root] = -1; //設定根節點的父親節點為-1,代表根節點沒有父親節點。

dfs(root, -1);

for(int i = 0; i < n; ++i)

return 0;

}

ac** 1 :

#include#include#include#include#includeusing namespace std;

const int maxn=100005;

int t;

int n,s;

int p[maxn];

vectorg[maxn];

void dfs(int u,int fa)

}int main()

p[s] = -1;

dfs(s,-1);

for(int i=1;i<=n;i++)

printf("%d%c",p[i],i==n? '\n' : ' ');

}return 0;

}

ac** 2 :

#include#include#define n 100000+10

using namespace std;

vectorg[n];

int p[n];//儲存結果

int s,t,n;

void read_tree()

}void dfs(int u,int fa) }}

int main()

} return 0;

}

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

題意是 在乙個吝嗇的國度裡有n個城市,這n個城市間只有n 1條路把這個n個城市連線起來。現在,tom在第s號城市,他有張該國地圖,他想知道如果自己要去參觀第t號城市,必須經過的前乙個城市是幾號城市 假設你不走重複的路 思路很簡單,無根樹轉有根樹,然後對於每個節點列印雙親節點即可 ps 一開始對vec...

無根樹轉有根樹

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

無根樹轉有根樹

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