Problem 11725 트리의 부모 찾기 문제 루트 없는 트리가 주어진다. 이때, 트리의 루트를 1이라고 정했을 때, 각 노드의 부모를 구하는 프로그램을 작성하시오.
입력 첫째 줄에 노드의 개수 N (2 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N-1개의 줄에 트리 상에서 연결된 두 정점이 주어진다.
출력 첫째 줄부터 N-1개의 줄에 각 노드의 부모 노드 번호를 2번 노드부터 순서대로 출력한다.
문제 링크 https://www.acmicpc.net/problem/11725 
예제 입력 1 7 1 6 6 3 3 5 4 1 2 4 4 7
예제 출력 1 4 6 1 3 1 4
예제 입력 2 12 1 2 1 3 2 4 3 5 3 6 4 7 4 8 5 9 5 10 6 11 6 12
예제 출력 2 1 1 2 3 3 4 4 5 5 6 6
solve 
트리의 부모를 구하는 문제이다. 
트리의 루트를 1이라고 정해놨으므로 bfs탐색을 통해 시작점을 1로 지정한 후 탐색을 하면 된다. 
bfs를 수행하며 다음 노드의 부모는 현재 노드이기 때문에 parent[next] = node 와 같이 기록한다. 
탐색 후 2번 노드부터 출력한다. 
 
코드 설명 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 #include <iostream>  #include <vector>  #include <queue>  #include <algorithm>  using  namespace  std ;const  int  MAX = 100000 ;vector <int > a[MAX + 1 ];bool  check[MAX + 1 ];int  parent[MAX + 1 ];int  main (void )  {	int  n; 	cin  >> n; 	for  (int  i = 0 ; i < n - 1 ; i++)  	{ 		int  u, v; 		cin  >> u >> v; 		a[u].push_back(v); 		a[v].push_back(u); 	} 	queue <int > q; 	q.push(1 );  	check[1 ] = true ; 	while  (!q.empty())  	{ 		int  node = q.front(); 		q.pop(); 		for  (int  i = 0 ; i < a[node].size (); i++)  		{ 			int  next = a[node][i]; 			if  (check[next] == false ) 			{ 				q.push(next); 				check[next] = true ; 				parent[next] = node;  			} 		} 	} 	for  (int  i = 2 ; i <= n; i++) 	{ 		cout  << parent[i] << '\n' ; 	} }