만드는 중입니다

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

트리와 쉬운 쿼리

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

요약
가중치가 있는 트리에서 간선 길이를 바꾸고, 주어진 정점을 지나는 가장 긴 단순 경로의 길이를 구합니다.
난이도

어려움10점 중 8점

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

문제

다른 문제의 난이도가 너무 높은 것에 놀란 브루는, 자신과 같이 실력이 낮은 참가자도 즐길 수 있는 문제를 만들기로 했다.

트리가 주어진다. 아래 두 가지 쿼리를 처리하라.

  • 1 k x: kk번 간선의 길이를 xx로 바꾼다.
  • 2 p: pp번 정점을 지나는 가장 긴 단순 경로의 길이를 출력한다.

단순 경로는 한 정점을 두 번 이상 지나지 않는 경로이다.

정점의 번호는 1부터 시작한다.

입력

첫째 줄에 트리의 정점 개수 NN과 쿼리 개수 QQ가 주어진다. (2≤N,Q≤150,0002 \le N, Q \le 150{,}000)

둘째 줄부터 NN번째 줄까지 N−1N-1개의 줄에는 1번 간선부터 N−1N-1번 간선까지의 정보가 차례대로 주어진다. 각 간선마다 연결하는 두 정점의 번호 uiu_i, viv_i와 간선의 길이 did_i가 차례로 주어진다. (1≤ui,vi≤N1 \le u_i, v_i \le N, ui≠viu_i \ne v_i, 1≤di≤1091 \le d_i \le 10^9)

N+1N+1번째 줄부터 N+QN+Q번째 줄까지는 쿼리가 주어진다. 쿼리는 위에서 설명한 두 종류 중 하나이다. (1≤k<N1 \le k < N, 1≤x≤1091 \le x \le 10^9, 1≤p≤N1 \le p \le N)

입력으로 주어지는 트리는 올바른 트리임이 보장된다. 또, 2번 쿼리가 하나 이상 주어짐이 보장된다.

출력

2번 쿼리마다 그 결과를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    6 6
    1 3 3
    2 3 2
    3 4 4
    4 5 1
    4 6 6
    2 5
    1 2 4
    2 5
    1 2 2
    1 3 1
    2 5
    
    예상 출력
    8
    9
    7