개발/백준
[백준] 11725번. 트리의 부모 찾기 (C++)
yun000
2025. 2. 25. 11:19
문제
https://www.acmicpc.net/problem/11725
풀이
[DFS/BFS]
node 1부터 시작하여 연결된 노드를 탐색하며 부모 노드를 확인한다.
+) BFS가 더 효율적인 것을 볼 수 있다.
코드
1️⃣ DFS
#include <iostream>
#include <unordered_map>
#include <vector>
#include <stack>
using namespace std;
int visited[100001] = { 0 };
int result[100001] = { 0 };
vector<vector<int>> tree;
void check(int node, int parent) {
result[node] = parent;
for (int i = 0; i < tree[node].size(); i++) {
int next = tree[node][i];
if (visited[next] != 0)continue;
visited[next] = 1;
check(next,node);
}
}
int main() {
//INPUT
int N; cin >> N;
tree = vector<vector<int>>(N+1);
int n1, n2;
for (int i = 0; i < N-1; i++) {
cin >> n1 >> n2;
tree[n1].push_back(n2);
tree[n2].push_back(n1);
}
//CACULATE
visited[1] = 1;
check(1, 0);
//RESULT
for (int i = 2; i <= N; i++) {
cout << result[i] << "\n";
}
}
2️⃣ BFS
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
vector<vector<int>> tree;
int result[100001] = {0};
int main() {
//INPUT
int N; cin >> N;
tree.resize(N + 1);
int n1, n2;
for (int i = 0; i < N - 1; i++) {
cin >> n1 >> n2;
tree[n1].push_back(n2);
tree[n2].push_back(n1);
}
//CALCULATE
queue<int> q;
q.push(1);
while (!q.empty()) {
int node = q.front();
q.pop();
for (int next : tree[node]) {
if (result[next] == 0) {
result[next] = node;
q.push(next);
}
}
}
//RESULT
for (int i = 2; i <= N; i++) {
cout << result[i] << "\n";
}
}