[백준] 트리의 부모 찾기 c++
2025. 1. 8. 11:47ㆍ코딩테스트
트리의 부모 찾기 성공
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 | 256 MB | 97734 | 44364 | 31153 | 43.045% |
문제
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
출력
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
DFS를 이용해 문제를 해결한다
#include <iostream>
#include <vector>
using namespace std;
int N;
vector<int> answer;
vector<bool> visited;
vector<vector<int>> tree;
void DFS(int number) {
visited[number] = true;
// 현재 노드와 연결된 모든 노드에 대해 탐색
for (int i : tree[number]) {
if (false == visited[i]) { // 아직 방문하지 않은 노드라면
answer[i] = number; // 해당 노드의 부모를 현재 노드로 설정
DFS(i); // 해당 노드를 DFS로 탐색
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N;
visited.resize(N + 1);
answer.resize(N + 1);
tree.resize(N + 1);
// 트리 구조 입력 받기
for (int i = 1; i < N; i++) {
int n1, n2;
cin >> n1 >> n2;
tree[n1].push_back(n2); // n1과 n2는 서로 연결되므로 양방향으로 저장
tree[n2].push_back(n1); // n2와 n1도 서로 연결되므로 양방향으로 저장
}
DFS(1);
// 각 노드의 부모를 출력
for (int i = 2; i <= N; i++) {
cout << answer[i] << "\n";
}
return 0;
}
'코딩테스트' 카테고리의 다른 글
[백준] 문자열 집합 c++ (0) | 2025.01.10 |
---|---|
[백준] 트리 c++ (0) | 2025.01.09 |
[백준] 불우이웃돕기 c++ (0) | 2025.01.07 |
[백준] 다리 만들기2 c++ (0) | 2025.01.06 |
[백준] 최소 스패닝 트리 c++ (0) | 2025.01.05 |