描述在乙個吝嗇的國度裡有n個城市,這n個城市間只有n-1條路把這個n個城市連線起來。現在,tom在第s號城市,他有張該國地圖,他想知道如果自己要去參觀第t號城市,必須經過的前乙個城市是幾號城市(假設你不走重複的路)。 輸入
第一行輸入乙個整數m表示測試資料共有m(1<=m<=5)組
每組測試資料的第一行輸入乙個正整數n(1<=n<=100000)和乙個正整數s(1<=s<=100000),n表示城市的總個數,s表示參觀者所在城市的編號
隨後的n-1行,每行有兩個正整數a,b(1<=a,b<=n),表示第a號城市和第b號城市之間有一條路連通。
輸出每組測試資料輸n個正整數,其中,第i個數表示從s走到i號城市,必須要經過的上乙個城市的編號。(其中i=s時,請輸出-1)
樣例輸入
110 1
1 91 8
8 10
10 3
8 61 2
10 4
9 53 7
樣例輸出
-1 1 10 10 9 8 3 1 1 8
思路:簡單的深搜,加邊的時候要加入雙向邊。然後深搜每個點即可。
將無根樹化為有根樹,對每個節點進行遍歷,記錄從起點開始的父節點。
**如下:
#include#include#include#include#include#includeusing namespace std;
int pre[100005];
vectorv[100005];
void dfs(int cur)
}int main()
dfs(cur); //起點開始深搜
for(i = 1; i <= num; ++i)
printf("%d ", pre[i]); //每個節點的父節點都儲存在pri陣列,輸出即可
} return 0;
}
nyoj 20 吝嗇的國度 深搜
時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 在乙個吝嗇的國度裡有n個城市,這n個城市間只有n 1條路把這個n個城市連線起來。現在,tom在第s號城市,他有張該國地圖,他想知道如果自己要去參觀第t號城市,必須經過的前乙個城市是幾號城市 假設你不走重複的路 輸入第一行輸入乙個...
nyoj 20 吝嗇的國度 深搜
時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描寫敘述 在乙個吝嗇的國度裡有n個城市。這n個城市間僅僅有n 1條路把這個n個城市連線起來。如今,tom在第s號城市,他有張該國地圖。他想知道如果自己要去參觀第t號城市。必須經過的前乙個城市是幾號城市 如果你不走反覆的路 輸入 第一行...
吝嗇的國度 NYOJ 20(深搜 廣搜)
時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 在乙個吝嗇的國度裡有n個城市,這n個城市間只有n 1條路把這個n個城市連線起來。現在,tom在第s號城市,他有張該國地圖,他想知道如果自己要去參觀第t號城市,必須經過的前乙個城市是幾號城市 假設你不走重複的路 輸入 第一行輸入乙...