어흥

[백준 11725] 트리의 부모 찾기 (C++) 본문

알고리즘/백준

[백준 11725] 트리의 부모 찾기 (C++)

라이언납시오 2020. 3. 24. 20:51
728x90
반응형

문제 링크: https://www.acmicpc.net/problem/11725

 

11725번: 트리의 부모 찾기

루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.

www.acmicpc.net

1. 주의할 점

- Node의 최대가 10만개다 -> Vector를 사용한다

- Root Node는 1이다

 

2. 구현

- BFS를 통해 구한다

- Queue에 1을 넣고 시작한다

- Queue에서 Pop한 원소에 맞닿아있는 다른 Node들이 방문하지 않은 상태라면 해당 Node들의 부모를 현재 Pop한 Node로 설정한 후, 큐에 추가한다

- 위의 과정을 모든 Node에 방문할 때 까지 진행한다.

 

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
vector<int> v[100001];
int parent[100001];
int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int node, s, e;
	cin >> node;
	for (int i = 0; i < node - 1; i++) {
		cin >> s >> e;
		v[s].push_back(e);
		v[e].push_back(s);
	}
	for (int i = 1; i <= node; i++)
		parent[i] = -1;
	queue<int> q;
	q.push(1);
	parent[1] = 1;
	while (!q.empty()) {
		int cidx = q.front();
		q.pop();
		for (int i = 0; i < v[cidx].size(); i++) {
			int next = v[cidx][i];
			if (parent[next] == -1) {
				parent[next] = cidx;
				q.push(next);
			}
		}
	}
	for (int i = 2; i <= node; i++)
		cout << parent[i] << '\n';
	system("pause");
	return 0;
}
728x90
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 17404] RBG거리 2 (C++)  (0) 2020.03.25
[백준 5213] 과외맨 (C++)  (0) 2020.03.24
[백준 15644] 구슬 탈출 3 (C++)  (0) 2020.03.23
[백준 15653] 구슬 탈출 4 (C++)  (0) 2020.03.23
[백준 2011] 암호코드 (C++)  (0) 2020.03.23
Comments