Study hard
(c++)백준 11725번: 트리의 부모 찾기 본문
https://www.acmicpc.net/problem/11725
11725번: 트리의 부모 찾기
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
www.acmicpc.net
[풀이]
dfs로 부모 노드를 찾는 문제였다.
입력에서 부모자식 관계를 알 수 없기 때문에 양방향으로 저장해주었다.
1부터 차례로 자식노드를 찾으면서 자식노드의 부모노드가 현재노드임을 저장해주었다.
#include <iostream>
#include <vector>
using namespace std;
#define Max 100001
int N;
int Parent[Max];
bool check[Max];
vector<int>Tree[Max];
void input() {
cin >> N;
for (int i = 1; i <= N; i++) {
int a, b;
cin >> a >> b;
Tree[a].push_back(b);
Tree[b].push_back(a);
}
}
void dfs(int node) {
//현재 노드 체크 표시
check[node] = true;
//연결된 노드 중 자식 노드 찾기
for (int i = 0; i < Tree[node].size(); i++) {
int child = Tree[node][i];
if (check[child] == false) {
Parent[child] = node;
dfs(child);
}
}
}
void solution() {
input();
//root노드부터
dfs(1);
for (int i = 2; i <= N; i++) {
cout << Parent[i] << '\n';
}
}
int main() {
solution();
return 0;
}
'백준 > bfs, dfs' 카테고리의 다른 글
(c++)백준 16948번: 데스 나이트 (0) | 2020.08.29 |
---|---|
(c++)백준 1967번: 트리의 지름 (0) | 2020.06.23 |
(c++)백준 1991번: 트리 순회 (0) | 2020.06.22 |
(c++)백준 2178번: 미로 탐색 (0) | 2020.06.20 |
(c++)백준 7576번: 토마토 (0) | 2020.06.20 |