만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

트리 뽑아내기

시간 제한2초메모리 제한1024 MB

요약
가중치가 서로 다른 루트 트리에서 자식 중 가중치가 가장 작은 쪽을 따라 리프까지 가는 경로의 가중치를 한 칸씩 밀고 리프를 제거합니다. 이 작업을 N번 반복하며 매번 직전 1번 정점의 가중치를 출력합니다.
난이도

보통10점 중 7점

유형
트리, 시뮬레이션
정답자
아직 제출이 없습니다

문제

11번 정점부터 NN번 정점까지 NN개의 정점으로 이루어진 루트 있는 트리가 있다. 루트는 11번 정점이고, ii번 정점의 부모는 PiP_i번 정점이다(2≤i≤N2 \le i \le N). 각 정점은 서로 다른 정수 가중치를 가지며, ii번 정점의 가중치는 AiA_i이다(1≤i≤N1 \le i \le N). 자식이 없는 정점을 리프 정점이라고 한다.

루트인 11번 정점에서 출발하여 자식 중 가중치가 가장 작은 정점으로 이동하는 과정을 리프 정점에 도달할 때까지 반복한다. 이렇게 11번 정점에서 시작하여 리프 정점에서 끝나는 경로 S={S1,⋯ ,Sk}S = \{S_1, \cdots, S_k\}를 특별한 경로라고 한다.

뽑아내기 연산은 다음과 같다.

  • S1S_1번 정점과 S2S_2번 정점의 가중치를 교환한다.
  • S2S_2번 정점과 S3S_3번 정점의 가중치를 교환한다.
  • ⋯\cdots
  • Sk−1S_{k-1}번 정점과 SkS_k번 정점의 가중치를 교환한다.
  • SkS_k번 정점과 그 부모를 잇는 간선을 트리에서 제거한다.

즉, 특별한 경로 위의 각 정점은 경로에서 자신 다음에 오는 정점의 가중치를 받고, 경로 끝의 리프 정점은 트리에서 제거된다.

그림의 첫 번째 트리에서 특별한 경로는 S={1,3,4}S = \{1, 3, 4\}이며, 뽑아내기를 적용하면 두 번째 트리가 된다. 다섯 번째 트리에서 특별한 경로는 S={1}S = \{1\}이고, 뽑아내기를 적용하면 11번 정점이 제거된다.

이와 같이 주어진 트리에 뽑아내기 연산을 NN번 수행한다. 각 뽑아내기 연산을 수행하기 전에 11번 정점에 적혀 있던 가중치의 값을 구하는 프로그램을 작성하라.

입력

첫 번째 줄에 정수 NN이 주어진다.

두 번째 줄에 N−1N-1개의 정수 P2,⋯ ,PNP_2, \cdots, P_N이 공백으로 구분되어 주어진다.

세 번째 줄에 NN개의 정수 A1,⋯ ,ANA_1, \cdots, A_N이 공백으로 구분되어 주어진다.

출력

NN개의 줄에 걸쳐 답을 출력한다. ii번째 줄에는 ii번째 뽑아내기 연산을 수행하기 전 11번 정점에 적혀 있던 가중치를 출력한다.

제한

  • 주어지는 모든 수는 정수이다.
  • 2≤N≤300 0002 \le N \le 300\,000
  • 1≤Pi<i1 \le P_i < i (2≤i≤N2 \le i \le N)
  • 1≤Ai≤N1 \le A_i \le N (1≤i≤N1 \le i \le N)
  • A1,⋯ ,ANA_1, \cdots, A_N은 서로 다르다.

예제1

  1. 예제 1

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