60029 점수 경주

시간 제한: 6.5초 메모리 제한: 1024MB

문제

KOI 공원은 11번 지점부터 NN번 지점까지 NN개의 지점으로 구성되어 있으며, 두 지점을 잇는 N1N - 1개의 도로가 있다. ii번째 도로는 UiU_i번 지점과 ViV_i번 지점을 이으며, 점수 WiW_i를 가진다(1iN11 \le i \le N - 1).

KOI 공원에서는 어떤 두 지점이든 도로를 따라 서로 이동할 수 있다. 즉, KOI 공원은 트리 구조를 이룬다.

KOI 공원에서 점수 경주를 하려고 한다. 점수 경주는 다음과 같이 이루어진다.

  • N1N - 1명의 참가자가 시작 지점에서 출발해, 각자 시작 지점을 제외한 서로 다른 N1N - 1개의 지점으로 단순 경로를 따라 이동한다.
  • 각 참가자는 처음에 00점의 점수를 가지고 있다.
  • 각 도로에 대해, 해당 도로를 지나면 그 도로의 점수만큼 점수를 받게 된다.
  • 참가자들은 어떤 지점에서든 자신의 점수를 00점으로 만들 수 있다. 자신의 목표 지점으로 도착한 후에도 가능하다.

어떤 참가자의 최종 점수를 최대화하는 방법의 하나로는 어떤 지점에서 점수가 00미만이 될 때마다 00점으로 바꾸는 방법이 있다. 이를 최적 전략이라고 하자. 참가자들은 모두 최적 전략을 따르기로 하였다.

ii번 지점에 대해, 해당 지점이 시작 지점일 때 최적 전략을 따랐을 때 참가자들의 최종 점수의 총합을 SiS_i라고 하자. 또한 그때 참가자들이 자신의 점수를 00점으로 바꾼 횟수의 총합을 CiC_i라고 하자.

예를 들어, KOI 공원의 모습이 다음과 같을 때, 11번 지점이 시작 지점인 경우를 생각해 보자.

최적 전략을 따를 때, 점수 경주의 과정은 다음과 같다.

  • 22번 지점이 목표 지점인 참가자는 22번 지점으로 이동하며 1-1점을 받게 된다. 이후 22번 지점에서 자신의 점수를 00점으로 만든다. 최종 점수는 00점이다.
  • 33번 지점이 목표 지점인 참가자는 33번 지점으로 이동하며 22점을 받게 된다. 최종 점수는 22점이다.
  • 44번 지점이 목표 지점인 참가자는 22번 지점으로 이동하며 1-1점을 받는다. 이후 22번 지점에서 자신의 점수를 00점으로 만든다. 이후 44번 지점으로 이동하며 22점을 받게 된다. 최종 점수는 22점이다.
  • 55번 지점이 목표 지점인 참가자는 33번 지점으로 이동하며 22점을 받는다. 이후 55번 지점으로 이동하며 3-3점을 받는다. 이후 55번 지점에서 자신의 점수를 00점으로 만든다. 최종 점수는 00점이다.
  • 66번 지점이 목표 지점인 참가자는 33번 지점으로 이동하며 22점을 받는다. 이후 66번 지점으로 이동하며 1-1점을 받게 된다. 최종 점수는 11점이다.

따라서 S1=5S_1 = 5, C1=3C_1 = 3이다.

S1,,SNS_1,\cdots,S_NC1,,CNC_1,\cdots,C_N을 구하는 프로그램을 작성하라.

입력

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

이후 N1N - 1개의 줄에 걸쳐 ii번째 줄에는 UiU_i, ViV_i, WiW_i가 공백으로 구분되어 주어진다.

출력

S1,,SNS_1,\cdots,S_N만을 구한 경우

  • 첫 번째 줄에 00을 출력한다.
  • 두 번째 줄에 S1,,SNS_1, \cdots, S_N을 공백으로 구분하여 출력한다.

S1,,SNS_1, \cdots, S_NC1,,CNC_1,\cdots,C_N을 구한 경우

  • 첫 번째 줄에 11을 출력한다.
  • 두 번째 줄에 S1,,SNS_1, \cdots, S_N을 공백으로 구분하여 출력한다.
  • 세 번째 줄에 C1,,CNC_1, \cdots, C_N을 공백으로 구분하여 출력한다.

제한

  • 주어지는 모든 수는 정수이다.
  • 2N3000002 \le N \le 300\,000
  • 1Ui,ViN1 \le U_i, V_i \le N (1iN1)(1 \le i \le N - 1)
  • 10000000Wi10000000-10\,000\,000 \le W_i \le 10\,000\,000 (1iN1)(1 \le i \le N - 1)

서브태스크

12N1000N \le 1\,000
260Wi50 \le W_i \le 5 (1iN1)(1 \le i \le N - 1)
3200Wi50 \le W_i \le 5 또는 Wi1000000W_i \le -1\,000\,000 (1iN1)(1 \le i \le N - 1)
44Ui=1U_i = 1, Vi=i+1V_i = i + 1 (1iN1)(1 \le i \le N - 1)
510Ui=iU_i = i, Vi=i+1V_i = i + 1 (1iN1)(1 \le i \le N - 1)
616Ui=i+12U_i = \lfloor \frac{i + 1}{2} \rfloor, Vi=i+1V_i = i + 1 (1iN1)(1 \le i \le N - 1)
718세 개 이상의 다른 지점과 도로로 연결된 지점은 최대 두 개이다.
824추가 제약 조건 없음.

각 부분문제에 대해, S1,,SNS_1,\cdots,S_N만을 구한 경우 해당 부분문제의 점수의 절반을 얻을 수 있다. 그 방법에 대해서는 출력 형식을 참고하라. S1,,SNS_1,\cdots,S_NC1,,CNC_1,\cdots,C_N을 구한 경우, S1,,SNS_1,\cdots,S_N이 정확해도 C1,,CNC_1,\cdots,C_N이 정확하지 않다면 점수를 받을 수 없음에 유의하라.

예제 입출력

예제 입력 1
6
1 2 -1
1 3 2
2 4 2
3 5 -3
3 6 -1
예제 출력 1
1
5 5 6 8 6 6
3 5 2 0 6 6
예제 입력 2
10
5 10 5
4 7 5
1 6 1
8 9 5
9 4 1
6 7 0
5 1 0
2 9 3
4 3 3
예제 출력 2
1
51 75 71 47 51 47 47 91 51 91
0 0 0 0 0 0 0 0 0 0
예제 입력 3
10
8 1 -2
10 5 -2
10 6 1
3 8 3
10 8 3
4 6 4
9 8 -5
9 7 5
6 2 -4
예제 출력 3
1
24 23 40 48 21 23 24 24 24 21
11 12 2 0 12 4 1 3 9 4

출처

올림피아드 한국정보올림피아드 KOI 2024 2차 고등부 4번
solution.cpp
에디터 불러오는 중...