만드는 중입니다

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

왕국 분할

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

요약
N개의 도시로 이루어진 트리를 P개의 연결된 부분으로 나눠, 각 부분의 도시 값 합이 같도록 하는 방법을 찾습니다.
난이도

보통10점 중 6점

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

문제

먼 옛날 왕국에 NN개의 도시가 있으며, 번호는 00부터 N−1N-1까지이다. 도시들은 N−1N-1개의 양방향 도로로 연결되어 있고, 각 도로는 정확히 두 도시를 잇는다. 임의의 두 도시 사이에는 유일한 경로가 있다. 각 도시 ii에는 값 C[i]C[i]가 있으며, 이 값은 음수일 수도 있다. 옛 국왕이 후계자를 정하지 않고 죽자, 왕국의 지배권을 노리는 PP명의 영주(번호는 00부터 P−1P-1까지) 사이에 내전이 일어났다. 길고 참혹한 전쟁 끝에 영주들은 어느 누구도 나머지 모든 영주를 이길 수 없다는 것을 깨달았다. 그들은 휴전에 합의하고, 왕국을 PP개의 부분으로 나누어 영주마다 하나씩 맡기기로 했다. 분할은 다음 규칙을 지켜야 한다. 두 도시 aa와 bb가 같은 부분에 속하면, 둘 사이의 유일한 경로에 있는 모든 도시도 그 부분에 속해야 한다. 모든 영주는 반드시 적어도 한 도시를 받아야 한다. 어느 영주도 다른 영주보다 적게 받아서는 안 되므로, 모든 부분의 값은 같아야 한다. 부분의 값은 그 부분에 속한 도시들의 CC 값을 모두 더한 것이다.

입력

샘플 채점기는 다음 형식으로 입력을 읽는다.

  • 1번째 줄: N P
  • 2번째 줄: C[0] C[1] .. C[N - 1]
  • 3번째 줄: F[0] F[1] .. F[N - 2]
  • 4번째 줄: T[0] T[1] .. T[N - 2]

출력

샘플 채점기는 먼저 division(N, P, C, F, T)의 반환값을 한 줄로 출력한다. 다음 줄에는 parts(R) 호출의 입력이 되는 정수 NN개를 출력한다.

제한

1≤P≤N≤1000001 \le P \le N \le 100000

예제1

  1. 예제 1

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