#include <iostream>
#include <vector>
#include <queue>
std::vector<int> vec[100001] = {};
int iAns[100001] = {};
int main()
{
int N = 0;
std::cin >> N;
for (int i = 0; i < N - 1; ++i)
{
int iFirst = 0;
int iSecond = 0;
std::cin >> iFirst >> iSecond;
vec[iFirst].push_back(iSecond);
vec[iSecond].push_back(iFirst);
}
std::queue<int> que = {};
que.push(1);
while (!que.empty())
{
int iFront = que.front();
que.pop();
for (int j = 0; j < vec[iFront].size(); ++j)
{
if (!iAns[vec[iFront][j]])
{
iAns[vec[iFront][j]] = iFront;
que.push(vec[iFront][j]);
}
}
}
for (int i = 2; i <= N; ++i)
{
std::cout << iAns[i] << "\n";
}
return 0;
}
부모는 무조건 하나이기 때문에 이렇게 만들었습니다.
두개 입력받을 때 어떤게 부모인지 알 수 없기 때문에
두개 다 입력하고 루트(1)로부터 시작하면서 입력합니다.
이 때, 먼저 입력이 되었다면 부모가 있는 것이기에 넘어가는 걸로 했습니다.
'오늘의 알고리즘' 카테고리의 다른 글
[C++] 백준 11054 가장 긴 바이토닉 부분 수열 (0) | 2022.10.26 |
---|---|
[C++] 백준 15654 N과 M(5) (0) | 2022.10.25 |
[C++] 백준 11660 구간 합 구하기 5 (0) | 2022.10.24 |
[C++] 백준 11053 가장 긴 증가하는 부분 수열 (0) | 2022.10.21 |
[C++] 백준 5639 이진 검색 트리 (0) | 2022.10.20 |