nyoj 20 吝嗇的國度 DFS

2021-09-26 21:58:37 字數 1491 閱讀 8157

記憶體限制:64mb 時間限制:1000ms special judge: no

accepted:12 submit:43

在乙個吝嗇的國度裡有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)

複製

1

10 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

拓展:

free對記憶體進行釋放,主要是將malloc、new、realloc等申請的記憶體進行釋放

stl中的vector是進行動態記憶體的追加,用free進行記憶體釋放會使編譯器不清楚從哪開始釋放

分析:①、在資料結構方面我們選擇二維vector,用vector來存對應城市相鄰的城市,用.size()就可以得到與該城市相鄰的城市個數

②、因為dfs是線性的、回溯型搜尋方式,將會直接或回溯式的找到前面直接相鄰的城市

步驟、①、通過vector建立兩個城市的雙向距離關係

②、使用dfs從入口點s進入,將每乙個相鄰城市的前驅都賦值為對應的s

核心**:

1

void dfs(ints)2

9 }

c/c++**實現(ac):

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9

10using

namespace

std;

11const

int maxn = 1e5 + 5;12

intf[maxn];

13 vector a[maxn];

1415

void init(int

n)1624}

2526

void dfs(int

s)2734}

3536

intmain()

3754

return0;

55 }

NYOJ 20 吝嗇的國度 DFS

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 在乙個吝嗇的國度裡有n個城市,這n個城市間只有n 1條路把這個n個城市連線起來。現在,tom在第s號城市,他有張該國地圖,他想知道如果自己要去參觀第t號城市,必須經過的前乙個城市是幾號城市 假設你不走重複的路 輸入第一行輸入乙個...

NYOJ 20 吝嗇的國度 DFS

吝嗇的國度 時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 在乙個吝嗇的國度裡有n個城市,這n個城市間只有n 1條路把這個n個城市連線起來。現在,tom在第s號城市,他有張該國地圖,他想知道如果自己要去參觀第t號城市,必須經過的前乙個城市是幾號城市 假設你不走重複的路 輸入 ...

nyoj20 吝嗇的國度(dfs)

時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 在乙個吝嗇的國度裡有n個城市,這n個城市間只有n 1條路把這個n個城市連線起來。現在,tom在第s號城市,他有張該國地圖,他想知道如果自己要去參觀第t號城市,必須經過的前乙個城市是幾號城市 假設你不走重複的路 輸入第一行輸入乙個...