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

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

동적 지름

시간 제한5초메모리 제한512 MB

요약
가중치가 있는 트리에서 간선 가중치가 갱신될 때마다 지름을 출력한다. 각 질의는 직전 답을 이용해 복호화한다.
난이도

어려움10점 중 9점

유형
트리, 분할 정복, 세그먼트 트리, 동적 계획법
정답자
아직 제출이 없습니다

문제

가중치가 있는 무향 트리가 n개의 정점으로 주어지고, q개의 갱신이 주어진다. 각 갱신은 간선 하나의 가중치를 바꾼다. 각 갱신이 끝난 뒤 트리의 지름을 출력하라.

(두 정점 사이의 거리는 두 정점을 잇는 유일한 단순 경로 위 가중치의 합이다. 지름은 그러한 거리 중 가장 큰 값이다.)

입력

첫째 줄에 공백으로 구분된 세 정수 n, q, w가 주어진다 (2 ≤ n ≤ 100, 000, 1 ≤ q ≤ 100, 000, 1 ≤ w ≤ 20, 000, 000, 000, 000). n은 트리의 정점 수, q는 갱신의 수, w는 간선 가중치의 상한이다. 정점은 1부터 n까지 번호가 붙는다.

다음 n − 1개 줄에 초기 트리가 주어진다. 이 중 i번째 줄에는 공백으로 구분된 세 정수 ai, bi, ci가 주어진다 (1 ≤ ai, bi ≤ n, 0 ≤ ci < w). 처음에 정점 ai와 bi 사이에 가중치 ci인 간선이 있다는 뜻이다. 이 n − 1개 줄이 트리를 이룬다.

마지막으로 q개 줄에 질의가 주어진다. 이 중 j번째 줄에는 공백으로 구분된 두 정수 dj, ej가 주어진다 (0 ≤ dj < n − 1, 0 ≤ ej < w). 이 두 정수는 다음 방식으로 변환된다.

  • d'j = (dj + last) mod (n − 1)
  • e'j = (ej + last) mod w

여기서 last는 직전 질의의 결과이다(처음에는 last = 0). 순서쌍 (d'j , e'j)은 입력에서 d'j + 1번째 간선의 가중치를 e'j로 바꾸는 질의를 나타낸다.

출력

q개 줄을 출력한다. 각 i에 대해 i번째 줄에 i번째 갱신이 끝난 뒤 트리의 지름을 출력한다.

힌트

첫 번째 예제는 아래 그림에 나와 있다. 가장 왼쪽 그림은 그래프의 초기 상태를 나타낸다. 그 뒤의 그림은 각각 갱신이 끝난 뒤의 상황을 나타낸다. 갱신된 간선의 가중치는 초록색으로, 지름은 빨간색으로 칠해져 있다.

첫 번째 질의는 3번째 간선, 즉 {2, 4}의 가중치를 1030으로 바꾼다. 임의의 두 정점 사이의 거리 중 가장 큰 값은 3과 4 사이의 거리인 2030이다.

답이 2030이므로 두 번째 질의는

d'2 = (1 + 2030) mod 3 = 0

e'2 = (1020 + 2030) mod 2000 = 1050

가 되어, 간선 {1, 2}의 가중치가 1050으로 바뀐다. 그러면 {1, 4}가 거리가 2080으로 가장 먼 쌍이 된다.

세 번째 질의는

d'3 = (1 + 2080) mod 3 = 2

e'3 = (890 + 2080) mod 2000 = 970

으로 복호화된다. 간선 {2, 4}의 가중치가 970으로 줄어들자 가장 먼 쌍이 갑자기 {1, 3}이 되고, 거리는 2050이다.

예제2

  1. 예제 1

    입력
    4 3 2000
    1 2 100
    2 3 1000
    2 4 1000
    2 1030
    1 1020
    1 890
    
    예상 출력
    2030
    2080
    2050
    
  2. 예제 2

    입력
    10 10 10000
    1 9 1241
    5 6 1630
    10 5 1630
    2 6 853
    10 1 511
    5 3 760
    8 3 1076
    4 10 1483
    7 10 40
    8 2051
    5 6294
    5 4168
    7 1861
    0 5244
    6 5156
    3 3001
    8 5267
    5 3102
    8 3623
    
    예상 출력
    6164
    7812
    8385
    6737
    6738
    7205
    6641
    7062
    6581
    5155