반응형
https://www.acmicpc.net/problem/11725
본 문제는 트리로 연결된 두 정점을 입력으로 들어오면 2번 노드부터 부모 노드를 출력하는 문제다. ( 단, 1을 root로 한다. ) 따라서, 모든 연결 정보를 인접 리스트에 저장하고 root부터 BFS를 이용해 탐색을 하면서 각 노드의 부모 노드를 저장한다. 2번 노드 부터 n까지 반복하면서 부모노드를 출력한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
vector<int> v[100001];
int d[100001];
bool chk[100001];
int main() {
int n;
scanf("%d", &n);
for (int i = 1; i < n; i++) {
int x, y;
scanf("%d %d", &x, &y);
v[x].push_back(y);
v[y].push_back(x);
}
queue<int> q;
chk[1] = true;
q.push(1);
while (!q.empty()) {
int node = q.front();
q.pop();
for (int i = 0; i < v[node].size(); i++) {
int next = v[node][i];
if(!chk[next]) {
chk[next] = true;
q.push(next);
d[next] = node;
}
}
}
for (int i = 2; i <= n; i++) {
printf("%d\n", d[i]);
}
}
|
cs |
반응형
'백준' 카테고리의 다른 글
[백준 15486] 퇴사 2, C++ (0) | 2020.02.13 |
---|---|
[백준 1939] 중량제한, C++ (0) | 2020.02.11 |
[백준 6087] 레이저 통신, C++ (0) | 2020.02.07 |
[백준 1790] 수 이어 쓰기 2, C++ (0) | 2020.02.05 |
[백준 11728] 배열 합치기, C++ (0) | 2020.02.05 |
댓글