문제조건
생각 과정
따라서 필요한 것.
7
1 6
6 3
3 5
4 1
2 4
4 7
4
6
1
3
1
4
#include <iostream>
#include <vector>
#include <queue>
// 2 <= N <= 10,0000
using namespace std;
int n;
vector<int> graph[100001];
queue<int> q;
int visit[100001];
int whoisparent[100001];
void bfs(int start)
{
int cur;
q.push(start);
while (q.empty() == false) {
cur = q.front();
q.pop();
// Check child nodes : <1. parent node = cur node>
for (int i = 0; i < graph[cur].size(); i++)
{
int temp_child = graph[cur][i];
// if this child has not been visited , progress these
if (!visit[temp_child]) {
whoisparent[temp_child] = cur; // assign cur node as parent node of this temp_child node.
q.push(temp_child); // push this temp_child node into the queue.
visit[temp_child] = 1;
}
}
}
}
int main()
{
cin >> n; // get the number of node
// get the edge info (개수 : n-1개의 정보가 주어진다)
// Undirected 이네
for (int i = 0; i < n - 1; i++)
{
int v1, v2;
cin >> v1 >> v2;
graph[v1].push_back(v2);
graph[v2].push_back(v1);
}
bfs(1);
for (int i = 2; i <= n; i++)
{
printf("%d\n", whoisparent[i]);
}
}
아무래도 Tree 개념이 전혀 생각이 안나서 Tree 이론 공부를 2월 안에 해야할 것 같다.
Graph문제만 너무 풀었다. 이 문젠 이름은 Tree였으나 결국 graph접근법으로 푸는 문제였네..