반응형
문제
https://www.acmicpc.net/problem/11725
접근방법
1) 접근 사고
깊이 우선 탐색에서 가장 깊은 탐색을 진행한 뒤 재귀가 끝난 경우를 노드의 현재 번호값에 저장하면 되는 문제였습니다.
2) 시간 복잡도
3) 실수
4) 배운점
5) PS
정답 코드
#include <bits/stdc++.h>
using namespace std;
int n;
const int MAX = 100005;
vector<int> edge[MAX];
bool visited[MAX];
int ret[MAX];
void DFS(int cur) {
visited[cur] = true;
for (auto next: edge[cur]) {
if (!visited[next]) {
DFS(next);
//2.가장 깊은 우선탐색을 한뒤 끝날 경우 자신의 부모를 넣어준다.
ret[next] = cur;
}
}
}
void pro() {
DFS(1);
for(int i = 2; i <= n; i++){
cout << ret[i] <<"\n";
}
}
void input() {
cin >> n;
//1.간선 만들기
for (int i = 0; i < n - 1; i++) {
int x, y;
cin >> x >> y;
edge[x].push_back(y);
edge[y].push_back(x);
}
}
int main() {
input();
pro();
}
반응형
'백준문제풀이 > DFS' 카테고리의 다른 글
2606번-양 (0) | 2022.04.14 |
---|---|
11724번-연결 요소의 개수 (0) | 2022.04.14 |
14888번-연산자 끼워넣기 (0) | 2021.09.04 |