๐Ÿ’ป

[๋ฐฑ์ค€] DFSBFS - 11725. ํŠธ๋ฆฌ์˜ ๋ถ€๋ชจ ์ฐพ๊ธฐ ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฌธ์ œํ’€์ด Baekjoon

[๋ฐฑ์ค€] DFSBFS - 11725. ํŠธ๋ฆฌ์˜ ๋ถ€๋ชจ ์ฐพ๊ธฐ

๋˜ํšจ๋‹ˆ 2020. 11. 13. 15:31

www.acmicpc.net/problem/11725

 

11725๋ฒˆ: ํŠธ๋ฆฌ์˜ ๋ถ€๋ชจ ์ฐพ๊ธฐ

๋ฃจํŠธ ์—†๋Š” ํŠธ๋ฆฌ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ, ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ฅผ 1์ด๋ผ๊ณ  ์ •ํ–ˆ์„ ๋•Œ, ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

www.acmicpc.net

 

๋ฌธ์ œ

๋ฃจํŠธ ์—†๋Š” ํŠธ๋ฆฌ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ, ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ฅผ 1์ด๋ผ๊ณ  ์ •ํ–ˆ์„ ๋•Œ, ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜ N (2 ≤ N ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N-1๊ฐœ์˜ ์ค„์— ํŠธ๋ฆฌ ์ƒ์—์„œ ์—ฐ๊ฒฐ๋œ ๋‘ ์ •์ ์ด ์ฃผ์–ด์ง„๋‹ค.

์ถœ๋ ฅ

์ฒซ์งธ ์ค„๋ถ€ํ„ฐ N-1๊ฐœ์˜ ์ค„์— ๊ฐ ๋…ธ๋“œ์˜ ๋ถ€๋ชจ ๋…ธ๋“œ ๋ฒˆํ˜ธ๋ฅผ 2๋ฒˆ ๋…ธ๋“œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1 ๋ณต์‚ฌ

7

1 6

6 3

3 5

4 1

2 4

4 7

์˜ˆ์ œ ์ถœ๋ ฅ 1 ๋ณต์‚ฌ

4

6

1

3

1

4

ํ’€์ด

DFS๋ฅผ ์ด์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๊ณ , ์ธ์ ‘ํ–‰๋ ฌ์„ ์ด์šฉํ–ˆ๋‹ค.

 

์˜ˆ์ œ1์„ ์˜ˆ์‹œ๋กœ ๋“ค๋ฉด,

 

[1] 6 4

[2] 4

[3] 6 5

[4] 1 2 7

[5] 3

[6] 1 3

[7] 4

 

๋กœ ์ž…๋ ฅ๋ฐ›์€ ๋ฐฐ์—ด์„ ๋„ฃ์–ด์ฃผ๊ณ , DFS๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ถ€๋ชจ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค. 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//11725. ํŠธ๋ฆฌ์˜ ๋ถ€๋ชจ ์ฐพ๊ธฐ
#include <iostream>
#include <vector>
 
using namespace std;
 
bool visited[100001];
int parent[100001];
vector<int> v[100001];
 
void dfs(int currentNode){
    visited[currentNode] = true;
 
    for(int i=0; i<v[currentNode].size(); i++){
        int nextNode = v[currentNode][i];
        
        if(!visited[nextNode]){
            parent[nextNode] = currentNode;
            dfs(nextNode);
        }
    }
}
 
int main(){
    int N;
    cin >> N;
    for(int i=0; i<N-1; i++){
        int firstNode, secondNode;
        cin >> firstNode >>  secondNode;
 
        v[firstNode].push_back(secondNode);
        v[secondNode].push_back(firstNode);
    }
 
    dfs(1);
 
    for(int i=2; i<=N; i++){
        cout << parent[i] << "\n";
    }
 
    return 0;
}
cs
๋ฐ˜์‘ํ˜•
Comments