https://www.acmicpc.net/problem/11725
11725번: 트리의 부모 찾기
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
www.acmicpc.net
문제
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
출력
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int N;
vector<int> rel[100001];//관련성을 나타내는 배열
int pre[100001];//이전 노드(여기서는 부모 노드)
bool visit[100001];
void bfs(int start)
{
queue<int> q;
q.push(start);
visit[start] = true;
while (!q.empty())
{
int x = q.front();
q.pop();
for (int i = 0; i < rel[x].size(); i++)
{
if (visit[rel[x][i]])
continue;
pre[rel[x][i]] = x;
visit[rel[x][i]] = true;
q.push(rel[x][i]);
}
}
}
int main()
{
cin >> N;
for (int i = 1; i < N; i++)
{
int x, y;
cin >> x >> y;
rel[x].push_back(y);
rel[y].push_back(x);
}
bfs(1);
for (int i = 2; i <= N; i++)
{
cout << pre[i] << '\n';
}
}
'백준 c++ > (1-2)백준 c++ 알고리즘 기초' 카테고리의 다른 글
백준 2250 c++ 트리의 높이와 너비 (0) | 2023.01.18 |
---|---|
백준 1991 c++ 트리 순회 (0) | 2023.01.17 |
백준 2146 다리 만들기 c++ (0) | 2023.01.16 |
백준 16964 DFS 스페셜 저지 c++ (0) | 2023.01.15 |
백준 16940 BFS 스페셜 저지 c++ (0) | 2023.01.13 |