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


[Figure 1] 문제를 이해하는 과정에서 싸지방 윈도우의 그림판을 이용해서 그려봤다. 상당한 퀄리티이다.
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int MAX = 100000;
vector<int> adj_list[MAX + 1];
int Parent[MAX + 1]; // 아직 부모노드 못 찾은 상태(초기값) == 0
queue<int> q;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int N;
cin >> N;
// 인접 리스트 업데이트
for(int i = 0; i < N; i++){
int tmp1,tmp2;
cin >> tmp1 >> tmp2;
adj_list[tmp1].push_back(tmp2);
adj_list[tmp2].push_back(tmp1);
}
int x = 1;
for(auto &k : adj_list[1]){
Parent[k] = 1;
q.push(k);
}
while(!q.empty()){
x = q.front();
q.pop();
for(auto &k: adj_list[x]){
if(Parent[k] == 0){
Parent[k] = x;
q.push(k);
}
}
}
for(int i = 2; i <= N; i++){
cout << Parent[i] << '\n';
}
return 0;
}
이번 문제는 피드백할 점이 딱히 없었다 ㅎㅎ