반응형
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 |
Tags
- c++
- dfs
- 멀티맵
- 다이나믹 프로그래밍
- 코딩테스트
- 에러
- 자료 구조
- BFS
- 다익스트라
- 풀이
- 분할정복
- 파이어베이스
- 브루트포스
- 백준
- 문자열
- dp
- 맵
- 백트래킹
- 코드트리조별과제
- c++풀이
- 파이어스토어
- 그래프 탐색
- 그래프
- 시뮬레이션
- 그래프 이론
- 코드트리
- 안드로이드
- map
- 코드트리 조별과제
- 코틀린
Archives
- Today
- Total
Kangho_Story
[백준]11725번 트리의 부모 찾기 C++ 풀이 본문
728x90
반응형
알고리즘 분류
- 그래프 이론
- 그래프 탐색
- 트리
- BFS
- DFS
문제 설명
루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
입력 설명
첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
출력 설명
첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
예제 입력
7
1 6
6 3
3 5
4 1
2 4
4 7
12
1 2
1 3
2 4
3 5
3 6
4 7
4 8
5 9
5 10
6 11
6 12
예제 출력
4
6
1
3
1
4
1
1
2
3
3
4
4
5
5
6
6
아이디어
입력받은 값으로 그래프를 만든다.
BFS로 그래프를 순회하면서 자신의 부모 노드를 기록하는 배열에 부모 노드를 기록한다.
이후 2~n번의 부모 노드를 모두 출력한다.
알고리즘
입력 받은 값으로 그래프를 만든다.
BFS로 그래프를 순회하면서 자신의 부모 노드를 기록하는 배열에 값이 0이라면
자신의 부모 노드를 기록하고 BFS를 돌기 위한 queue에 자신을 넣는다.
BFS 순회가 끝나면 2~n번의 부모 노드 기록 배열의 값을 출력한다.
코드
#include <iostream>
#include <vector>
#include <list>
using namespace std;
int n;
void BFS(vector<vector<int>> &vec)
{
list<int> li;
vector<int> ans(n+1,0);
li.push_back(1);
ans[1] = 1;
while(!li.empty())
{
int bef = li.front();
li.pop_front();
for(auto &a: vec[bef])
{
if(ans[a] == 0)
{
li.push_back(a);
ans[a] = bef;
}
}
}
for(int i=2; i<=n; i++)
cout<<ans[i]<<"\n";
}
int main()
{
cin>>n;
vector<vector<int>> vec(n+1);
for(int i=0,a,b; i<n-1; i++)
{
cin>>a>>b;
vec[a].push_back(b);
vec[b].push_back(a);
}
BFS(vec);
return 0;
}
후기
문제 링크 -> https://www.acmicpc.net/problem/11725
1차 시도 : 처음에는 단순히 1차원 배열만을 사용하는 방법으로 시도, 주어지는 노드가 연결되어 있지 않은 경우가 있어서 실패
2차 시도 : 연결되어 있지 않은 노드가 주어질 경우 list에 임시로 저장해 놓고 모든 입력을 다 받은 후 list에 남은 노드들을 처리하는 방법으로 시도, 역순으로 주어질 경우 n(n-1)/2만큼 걸리므로 시간초과
3차 시도 : 정석적인 BFS를 사용하는 방법으로 시도, 성공
본 블로그의 모든 글은 개인적인 학습 내용이므로 다양한 오류가 있을 수 있습니다.
오류를 발견하신다면 해당 내용 댓글로 알려주시면 감사하겠습니다!
728x90
반응형
'PS' 카테고리의 다른 글
[백준] 16953번 A -> B C++ 풀이16953번 A -> B C++ 풀이 (0) | 2024.09.10 |
---|---|
[백준] 15650번 N과 M (2) C++ 풀이 (0) | 2024.09.09 |
[백준] 9019번 DSLR C++ 풀이 (1) | 2024.09.05 |
[백준] 11053번 가장 긴 증가하는 부분 수열 C++ 풀이 (0) | 2024.09.04 |
[백준]1932번 정수 삼각형 C++ 풀이 (0) | 2024.09.03 |
Comments