Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 임베디드 딥러닝
- 포스코 ai 교육
- 코테
- DP
- 그리디
- tflite
- MCU 딥러닝
- tinyml
- dfs
- 컴퓨팅사고
- 삼성코테
- 알고리즘
- 딥러닝
- 코테 문제
- 포스코 교육
- 영상처리
- 삼성역테
- 삼성역량테스트
- TensorFlow Lite
- 포스코 AI교육
- bfs문제
- 삼성코딩테스트
- 다이나믹프로그래밍
- sort
- 자료구조
- DP문제
- dfs문제
- 초소형머신러닝
- BFS
- 코딩테스트
Archives
- Today
- Total
코딩뚠뚠
[백준문제풀이] 11725 트리의 부모 찾기 본문
반응형
풀이 일시 : 2020-12-27
문제 :
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
입력 :
첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
ex)
7
1 6
6 3
3 5
4 1
2 4
4 7
출력 :
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
ex)
4
6
1
3
1
4
풀이 :
입력이 주어지는 것을 vector에 받아 트리를 구성해준다.
BFS로 모든 노드를 탐색하며 각각 노드마다 자신의 부모를 체크해줄 수 있다.
자신의 부모를 체크했다면 parent 배열에 저장해주고 한번에 출력해주자.
//트리의 부모찾기
//입력에서 두 정점이 연결되었다는것은 하나는 그것의 부모이고 하나는 자식일것이다.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int MAX = 100001;
int N;
vector <int> v[MAX];
int visited[MAX];
int parent[MAX];
void bfs() { //모든 노드를 탐색하며 그때그때 자신의 부모를 체크한다.
queue<int>q;
q.push(1); //1이 루트라고 설정해놓음
visited[1] = 1;
while (!q.empty()) {
int x = q.front();
q.pop();
for (int i = 0; i < v[x].size(); i++) {
int z = v[x][i];
if (!visited[z]) {
parent[z] = x; //check parent
visited[z] = 1;
q.push(z);
}
}
}
}
void printparent() {
for (int i = 2; i <= N; i++) {
cout << parent[i] << '\n';
}
}
int main() {
cin >> N;
int val1,val2;
for (int i = 0; i < N-1; i++) {
cin >> val1>>val2;
v[val1].push_back(val2);
v[val2].push_back(val1);
}
bfs();
printparent();
return 0;
}
참고자료 : vector
참고자료 : BFS
반응형
'알고리즘 문제풀이 > 백준문제풀이' 카테고리의 다른 글
[백준문제풀이] 10844 쉬운 계단 수 (0) | 2021.01.04 |
---|---|
[백준문제풀이] 1167 트리의 지름 (0) | 2021.01.04 |
[백준문제풀이] 1991 트리 순회 (0) | 2021.01.04 |
[백준문제풀이] 2632 피자판매 (0) | 2021.01.04 |
[백준문제풀이] 7453 합이 0인 네 정수 (0) | 2021.01.04 |