[백준] 11725번: 트리의 부모 찾기
2018. 5. 30. 23:20ㆍ알고리즘
11725번: 트리의 부모 찾기
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
www.acmicpc.net
트리의 성질을 이용한 BFS 문제입니다.
먼저, 트리의 부모 노드에서 자식 노드 방향으로 검사합니다.
루트 노드는 1이므로, 1부터 BFS를 이용해 검사하게 되면, 모든 노드들의 부모를 알 수 있게 됩니다.
그림을 그리면 더 쉽게 이해할 수 있습니다.
<예제 입력 1>
루트 노드인 1부터 BFS 탐색을 하면서 이전에 방문을 한 적이 있으면 isChecked[index] = true로 바꿔줍니다.
이렇게 탐색을 진행하게 될 경우, 어떤 노드에서 다음으로 방문할 노드들은 자식 노드임이 성립하게 되는 것을 알 수 있습니다.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int N;
vector<vector<int> > v;
int parent[100001];
bool isChecked[100001];
void input() {
cin >> N;
v.resize(N + 1);
for (int i = 0; i < N - 1; i++) {
int x, y;
cin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
}
void bfs()
{
queue<int> q;
q.push(1);
isChecked[1] = true;
while (!q.empty()) {
int x = q.front();
q.pop();
for (int nx : v[x]) {
if (!isChecked[nx]) {
parent[nx] = x;
isChecked[nx] = true;
q.push(nx);
}
}
}
}
void printAnswer() {
for (int i = 2; i <= N; i++) {
cout << parent[i] << '\n';
}
}
int main() {
ios::sync_with_stdio(false);
input();
bfs();
printAnswer();
return 0;
}
'알고리즘' 카테고리의 다른 글
[백준] 1931번: 회의실 배정 (0) | 2018.06.02 |
---|---|
[백준] 11047번: 동전 0 (0) | 2018.05.31 |
[백준] 1967번: 트리의 지름 (0) | 2018.05.31 |
[백준] 1167번: 트리의 지름 (0) | 2018.05.31 |
[백준] 9663번: N-Queen (0) | 2018.05.30 |