루트에서 가장 번호가 작은 자식으로 내려가는 경로를 따라 업무를 반복 처리하면서 경로상의 직원에게 1, 2, 3... 코인을 지급하고 끝 직원을 삭제했을 때, 직원마다 받은 코인의 총합을 구한다.
어려움8트리DFS시뮬레이션완전 탐색아직 제출이 없습니다시간 제한1초메모리 제한64 MB미르코가 거대 기업의 대표가 되었다. 이 기업에는 1번부터 N번까지 번호가 붙은 N명이 일하고, 미르코의 번호는 1이다. 미르코를 뺀 모든 직원에게는 상사가 정확히 한 명 있고, 그 직원을 상사의 부하라고 부른다. 한 상사가 부하를 여러 명 둘 수 있지만, 그 상사도 자기 상사에게 보고한다. 미르코만 예외다. 피라미드의 꼭대기에 있어서 상사가 없고 부하만 있다.
투자자에게서 일감이 들어오면 미르코는 그 일을 자기 부하 가운데 번호가 가장 작은 사람에게 넘긴다. 일을 받은 사람도 자기 부하 가운데 번호가 가장 작은 사람에게 넘기고, 이 과정은 부하가 없는 사람에게 일이 닿을 때까지 이어진다. 그 사람이 일을 직접 한다.
진짜 문제는 여기서 시작된다. 일을 한 사람은 1코인을 받고, 그 사람의 상사는 2코인, 그 상사의 상사는 3코인을 받는 식으로 올라가며, 미르코는 이 사슬에 놓인 사람 수만큼 코인을 받는다. 급여를 나눈 뒤 실제로 일한 직원은 이 구조가 불공평하다고 느껴 회사를 그만둔다.
다음 일감을 처리할 때는 사람이 한 명 줄어 있어 급여 총액이 작아지기도 하지만, 일은 계속되어야 한다. 일감은 계속 쌓이므로 일을 맡기고, 처리하고, 코인을 나누고, 일한 사람이 떠나는 절차는 미르코 혼자 남아 자신의 처음이자 마지막 일을 할 때까지 반복된다.
미르코는 그때까지 큰돈을 모으겠지만, 직원 각자가 얼마를 벌었는지도 알고 싶어 한다.
첫째 줄에 미르코를 포함한 직원 수 N이 주어진다 (2≤N≤200000).
둘째 줄에 N−1개의 정수 a2,a3,…,aN이 주어진다 (1≤ai<i). ai는 i번 직원의 상사 번호이다.
한 줄에 N개의 수를 공백 하나로 구분해 출력한다. i번째 수는 i번 직원이 받은 코인의 총합이다.
N=5인 예제를 따라가 보자. 미르코는 첫 일감을 2번에게 맡기고, 2번은 3번에게 넘기며, 3번이 그 일을 한다. 그래서 3번은 1코인, 2번은 2코인, 1번(미르코)은 3코인을 받는다. 그 뒤 3번이 회사를 떠난다.
미르코는 두 번째 일감도 2번에게 맡긴다. 3번이 이미 떠났으므로 2번은 4번에게 넘기고, 4번은 5번에게 넘겨 5번이 일을 한다. 이때 5번은 1코인, 4번은 2코인, 2번은 3코인, 1번은 4코인을 받는다. 그리고 5번이 떠난다.
같은 절차가 일감 5개에 대해 반복된다. 최종적으로 미르코는 13코인, 2번은 8코인, 4번은 3코인을 받고, 3번과 5번은 각각 1코인을 받는다.