아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

주민 수 복원

시간 제한4초메모리 제한256 MB

요약
트리와 각 정점에서 측정한 거리 가중 합이 주어지면 이를 만드는 정점별 인구 수를 복원합니다.
난이도

어려움10점 중 8점

유형
트리, DFS, 수학
정답자
아직 제출이 없습니다

문제

바이타자르는 프로그래밍 대회에 낼 문제를 준비하고 있다. 문제 초안은 이미 써 두었다.

바이토차에는 도시가 nn개 있고, 양방향 도로 n−1n - 1개가 도시를 잇는다. 도로망을 이용하면 어느 두 도시 사이든 오갈 수 있다. 직접 연결된 두 도시를 잇는 도로를 지나는 데는 한 시간이 걸린다. 도시에는 11번부터 nn번까지 번호가 붙어 있고, ii번 도시에는 주민 aia_i명이 산다.

내년에 바이토차에서 선거가 열린다. 투표 과정을 완전히 통제하려고 바이토차의 왕은 투표를 도시 한 곳에서만 진행하기로 했다. 바이토차의 모든 주민은 투표함이 있는 도시까지 최단 경로로 이동해 그곳에서 투표한다. 이제 투표를 진행할 도시를 고르는 일만 남았는데, 이 선택은 여러 요인에 달려 있다. 특히 각 도시 ii마다 바이토차의 모든 주민이 ii번 도시까지 오는 데 걸리는 시간의 합을 계산하고 싶다. 이 값을 bib_i라 하자. [...]

바이타자르는 이 문제에 쓸 아주 까다로운 테스트를 이미 만들어 두었지만, 실수로 자료의 절반을 잃어버렸다. 지금 각 테스트에 남은 것은 도로 연결을 적은 부분과 bib_i 값이 담긴 출력 파일뿐이다. 바이타자르는 이것만 가지고 바이토차 각 도시의 주민 수를 복원하려 한다.

입력

첫 줄에 바이토차의 도시 수를 뜻하는 정수 nn (2≤n≤3000002 \le n \le 300000)이 주어진다. 이어지는 n−1n - 1개 줄에는 도로 하나를 나타내는 두 정수 xix_i, yiy_i (1≤xi,yi≤n1 \le x_i, y_i \le n)가 주어진다. xix_i번 도시와 yiy_i번 도시가 도로로 이어져 있다는 뜻이다. 도로망은 모든 도시를 잇는다.

그다음 줄에는 정수 nn개로 이루어진 수열 bib_i (0≤bi≤1090 \le b_i \le 10^9)가 주어진다.

출력

정수 nn개로 이루어진 수열 aia_i를 공백으로 구분해 한 줄에 출력한다. aia_i는 바이토차 ii번 도시의 주민 수다. 출력한 수열 aia_i로 바이타자르의 문제를 풀면 입력으로 주어진 수열 bib_i가 나와야 한다.

입력은 답이 항상 존재하도록 주어진다. 도로망과 수열 bib_i가 정해지면 조건을 만족하는 수열 aia_i는 하나뿐이므로, 그 수열을 출력한다.

예제5

  1. 예제 1

    입력
    2
    1 2
    17 31
    
    예상 출력
    31 17
    
  2. 예제 2

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

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

    입력
    5
    4 3
    5 3
    2 3
    3 1
    28 30 12 32 14
    
    예상 출력
    2 1 8 0 9
    
  5. 예제 5

    입력
    8
    4 5
    8 3
    6 7
    4 1
    4 3
    5 7
    3 2
    132 183 128 89 94 168 121 189
    
    예상 출력
    11 5 6 11 11 9 10 2