https://www.acmicpc.net/problem/11725
✔ 문제 이해
루트노드가 1인 트리가 있다. 2부터 N까지 노드들의 부모노드를 순서대로 출력하라.
✔ 풀이 + 코드
자식노드부터 찾으려고 해서 답을 찾지 못했다. 트리는 부모노드부터 탐색하면 자식노드 모두를 탐색할 수 있다는 특징을 갖고 있다.
이를 사용하여 부모노드부터 타고 내려가 모든 자식노드들의 부모노드를 현재 방문하고 있는 노드로 설정해주면 된다.
#include <iostream>
#include <vector>
using namespace std;
int N, a, b;
vector<int> board[100004];
bool visited[100004];
int arr[100004];
void dfs(int n)
{
visited[n] = 1;
for(int i = 0; i < board[n].size(); ++i)
{
int next = board[n][i];
if(!visited[next]){
arr[next] = n;
dfs(next);
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> N;
for(int i = 0; i < N-1; ++i){
cin >> a >> b;
board[a].push_back(b);
board[b].push_back(a);
}
dfs(1);
for(int i = 2; i <= N; ++i){
cout << arr[i] << "\n";
}
return 0;
}
✔ 피드백
- 트리는 부모노드부터 탐색한다면 모든 노드를 방문할 수 있고, 그 전 노드(지나친 부모노드)를 신경쓰지 않아도 된다.
✔ reference
https://ongveloper.tistory.com/164
'Study > BOJ와 Programmers' 카테고리의 다른 글
[BOJ] 하얀칸 c++ (for문 index 규칙) (0) | 2023.04.07 |
---|---|
[BOJ] 1068 트리 c++ (트리 그래프, int형 dfs문 활용) (0) | 2023.04.06 |
[Programmers] 배달 c++ (우선순위 큐, 다익스트라) (0) | 2023.03.28 |
[Programmers] 줄 서는 방법 c++ (구현, 규칙 찾기) (0) | 2023.03.27 |
[Programmers] 단체사진찍기 c++ (순열) (0) | 2023.03.22 |