‡ CODING TEST STUDY ‡/º 백준
[백준 11725번 C++] 트리의 부모 찾기
Trudy | 송연
2023. 11. 12. 02:30
11725번: 트리의 부모 찾기 (acmicpc.net)
11725번: 트리의 부모 찾기
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
www.acmicpc.net

이해하기
루트가 없는 트리가 주어졌는 데, 트리의 루트를 1이라고 정한다. (??????)
일단 이해한 바로는 각 노드의 부모를 구해야하니 루트가 1로 주어졌으니까 1부터 dfs를 진행시켜서 노드들의 부모를 찾으면 된다.
주어진 간선들이 순서가 없으므로 무방향 그래프로 간주하고 풀어야한다.
이 특징들만 적용해서 일반 dfs 문제처럼 풀었더니 쉽게 풀 수 있었다.
최종 코드
#include <iostream>
#include <vector>
using namespace std;
int n;
int visited[100001] ={0, };
vector<int> v[100001];
//부모 노드를 저장할 배열
int parent[100001];
void dfs(int n){
visited[n] = 1;
for(int i=0; i<v[n].size(); i++){
int x = v[n][i];
if(visited[x]==0) {
dfs(x);
parent[x] = n;
}
}
}
int main()
{
cin >> n;
int a, b;
for(int i=1; i<n; i++){
cin >> a >> b;
v[a].push_back(b);
v[b].push_back(a);
}
//루트노드인 1부터 dfs를 진행하면서 parent[] 를 채워넣음
dfs(1);
// 노드 2부터 부모 노드 출력
for(int i=2; i<=n; i++){
cout << parent[i] << "\n";
}
return 0;
}