반응형
아이디어
처음엔 뭔문제인가 했다.
그냥 노드 1번부터 DFS하면 DFS들어가기 전 노드N은 DFS들어간 노드 N+1의 부모가 되는 논리
C++풀이
#include <bits/stdc++.h>
using namespace std;
vector<int> v[100001];
bool visited[100001];
int parent[100001];
int N;
void dfs(int node, int prev)
{
parent[node] = prev; // 해당 단계로 넘어오면 이전 노드는 부모이므로.
for(int i = 0 ; i< v[node].size(); i++)
{
if(visited[v[node][i]] == false){ //방문하지 않은 노드 방문.
visited[v[node][i]]=true;
dfs(v[node][i],node);
visited[v[node][i]]=false;
}
}
return;
}
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> N;
for(int i = 0 ; i< N-1; i++)
{
int a, b;
cin >> a >> b;
v[a].push_back(b);
v[b].push_back(a);
} //트리 생성
visited[1] = true; //1번부터 시작, 방문했다고 표시.
dfs(1,1);
for(int i = 2; i<= N; i++)
{
cout << parent[i] << " " ;
}
}
반응형
'Algorithm > Problem Solve' 카테고리의 다른 글
[백준 1991번] 트리 순회(C++) (0) | 2021.01.08 |
---|---|
[백준 1932번] 정수삼각형(C++) (0) | 2021.01.08 |
[백준 11053번] 가장 긴 증가하는 부분 수열 (C++) (0) | 2021.01.07 |
[백준 9465번] 스티커 (C++) (0) | 2021.01.06 |
[백준 15654번] N과 M (5) (C++ / Python) (0) | 2021.01.02 |