속도 줄이기

시간 제한1초메모리 제한128 MB

요약
소들이 순서대로 자기 목초지로 갈 때, 루트 1에서 그 목초지까지의 경로 위에 이미 도착한 소가 차지한 목초지가 몇 개인지 센다.
난이도

보통10점 중 7점

유형
트리, DFS, 누적 합, 구현
정답자
아직 제출이 없습니다

문제

농부 John에게는 1…N1 \dots N번으로 번호가 매겨진 소 NN마리가 있습니다. 매일 각 소는 외양간에서 자신만의 목초지로 걸어갑니다.

목초지들은 NN개의 노드로 이루어진 트리를 이루며, 외양간은 11번 목초지에 있습니다. 정확히 N−1N-1개의 양방향 길이 목초지들을 연결하고, 직접 연결된 두 목초지 사이에는 길이 정확히 하나 있으므로 임의의 두 목초지 사이의 경로는 유일합니다. ii번째 길은 목초지 AiA_i와 BiB_i를 연결합니다.

소 ii는 개인 목초지 PiP_i를 소유합니다. 모든 목초지는 정확히 한 마리의 소가 소유하므로 P1,P2,…,PNP_1, P_2, \dots, P_N은 1…N1 \dots N의 순열입니다.

외양간의 좁은 문으로는 한 번에 한 마리만 나갈 수 있고, 각 소는 바로 앞 소가 자신의 목초지에 도착할 때까지 기다립니다. 먼저 소 11이 나가 11번 목초지에서 P1P_1까지 걸어가 그곳에서 풀을 뜯기 시작합니다. 그다음 소 22가 나가 11번 목초지에서 P2P_2까지 걸어가고, 이런 식으로 계속됩니다.

소 ii가 PiP_i로 걸어가는 동안, 먼저 도착한 소가 이미 자리 잡은 목초지를 지나갈 수 있습니다. 그런 목초지에 들어설 때마다 친구를 방해하지 않으려고 속도를 줄입니다. 즉, 소 ii는 자기보다 먼저 나간 소(1…i−11 \dots i-1번) 중에서, 그 소유 목초지가 외양간(11번 목초지)부터 PiP_i까지의 경로 위에 있는 소의 수만큼 속도를 줄입니다.

아래 그림에서 괄호 안의 숫자는 각 목초지의 주인을 나타냅니다.

        1 (3)
       / \
  (1) 4   3 (5)
     / \
(2) 2   5 (4)

소 11은 44번 목초지로 가며 아무도 만나지 않습니다. 소 22는 22번 목초지로 가는 길에 이미 소가 있는 44번 목초지를 지나므로 한 번 속도를 줄입니다. 소 33은 11번 목초지(외양간)를 소유하므로 한 번도 속도를 줄이지 않습니다. 소 44는 55번 목초지로 가는 길에 이미 소가 있는 11번과 44번 목초지를 지나 두 번 속도를 줄입니다. 소 55는 33번 목초지로 가는 길에 이미 소가 있는 11번 목초지를 지나 한 번 속도를 줄입니다.

농부 John은 각 소가 몇 번 속도를 줄이는지 알고 싶어 합니다.

입력

  • 첫째 줄: 정수 NN (1≤N≤100,000)(1 \le N \le 100{,}000).
  • 둘째 줄부터 NN째 줄까지: i+1i+1째 줄에 두 정수 AiA_i와 BiB_i (1≤Ai,Bi≤N)(1 \le A_i, B_i \le N)가 공백으로 구분되어 주어지며, 이는 목초지 AiA_i와 BiB_i를 잇는 길입니다.
  • N+1N+1째 줄부터 N+NN+N째 줄까지: N+iN+i째 줄에 정수 PiP_i (1≤Pi≤N)(1 \le P_i \le N)가 주어지며, 이는 소 ii가 소유한 목초지입니다.

출력

  • 첫째 줄부터 NN째 줄까지: ii째 줄에 소 ii가 PiP_i로 가는 동안 속도를 줄이는 횟수를 정수 하나로 출력합니다.

예제2

  1. 예제 1

    입력
    5
    1 4
    5 4
    1 3
    2 4
    4
    2
    1
    5
    3
    
    예상 출력
    0
    1
    0
    2
    1
    
  2. 예제 2

    입력
    5
    1 2
    2 3
    3 4
    4 5
    1
    2
    3
    4
    5
    
    예상 출력
    0
    1
    2
    3
    4