백준 11725 트리의 부모 찾기

2020. 4. 17. 07:12Algorithm/문제풀이

https://www.acmicpc.net/problem/11725

 

11725번: 트리의 부모 찾기

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

www.acmicpc.net

각 노드의 부모를 찾는 문제이다. 예제 입력을 보면 누가 부모이고 자식인지 알 수 없다. 그래서 각 노드를 서로 넣어주어야 한다. 

 

for(int i = 1; i < N; i++){
		scanf("%d %d", &firstPoint, &secondPoint);
		map[firstPoint].push_back(secondPoint);
		map[secondPoint].push_back(firstPoint);
	}

 

이 문제는 1을 상위노드로 지정해주었기 때문에 1을 시작으로 연결된 노드들을 탐색하는 bfs 방법을 사용하면된다. 

그리고 각 결과값을 저장할 때 이미 상위 노드를 찾았을 때는 큐에 넣어 주지 않는다. 

 

물론 dfs로도 찾을 수 있다.

 

더보기
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;

vector <int> map[100002];
int result[100002];
int N;
queue <int> qu;

void input();
void bfs();
void output();

int main(){
	input();
	bfs();
	output();
}

void input(){
	scanf("%d", &N);
	int firstPoint, secondPoint;
	for(int i = 1; i < N; i++){
		scanf("%d %d", &firstPoint, &secondPoint);
		map[firstPoint].push_back(secondPoint);
		map[secondPoint].push_back(firstPoint);
	}
}

void bfs(){
	qu.push(1);

	while(!qu.empty()){
		int starter = qu.front();
		qu.pop();
		for(int i = 0; i < map[starter].size(); i++){
			if(result[map[starter][i]] == 0){
				result[map[starter][i]] = starter;
				qu.push(map[starter][i]);
			}
		}
	}
}

void output(){
	for(int i = 2; i <= N; i++ )
		printf("%d\n", result[i]);
}

'Algorithm > 문제풀이' 카테고리의 다른 글

백준 2263 트리의 순회  (0) 2020.04.17
백준 1167 트리의 지름  (0) 2020.04.17
백준 10942 팰린드롬?  (0) 2020.03.27
백준 1520 내리막길  (0) 2020.03.27
백준 그래프 2206 벽 부수고 이동하기  (0) 2020.03.17