BOJ

[ BOJ / C++ ] 11725번 : 트리의 부모 찾기

J_3s 2025. 5. 18. 13:15

[ BOJ ] 11725번 : 트리의 부모 찾기

문제 : https://www.acmicpc.net/problem/11725


[  문제  ]

루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.

[  입력  ]

첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.

[  출력  ]

첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.


[  문제 접근 및 풀이  ]

DFS를 통해서 now라는 변수로 현재 노드를 나타냈으며

양방향 간선이기에 현재 노드에서 부모 노드로 갈 수도 있으므로 현재 노드의 부모 노드도

포함시켜 사이클이 도는 것을 방지했다.

이후 현재 노드의 자식 노드를 돌면서

자식 노드의 부모를 현재 노드로 지정 후 DFS를 돌렸다.

 

[  소스 코드  ]

#include<bits/stdc++.h>
using namespace std;
int N;
vector<int> V[100001];
int P[100001];
void Q_11725();
void dfs(int now,int pe);
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	Q_11725();
}
void Q_11725(){
    cin >> N;
    for(int i=1;i<N;i++){
        int a,b;
        cin >> a >> b;
        V[a].push_back(b);
        V[b].push_back(a);
    }
    dfs(1,0);
    for(int i=2;i<=N;i++) cout << P[i] <<"\n";
}
void dfs(int now,int pe){
    for(auto x:V[now]){
        if(x==pe) continue;
        P[x]=now;
        dfs(x,now);
    }
}