만드는 중입니다

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

트리와 쿼리 21

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

요약
가중치가 있는 트리에서 간선을 끊고 새로 잇는 연산을 처리하고, 주어진 정점 집합 사이 경로들의 합집합 간선 가중치 합을 구합니다.
난이도

어려움10점 중 9점

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

문제

NN개의 정점으로 이루어진 트리가 있다. 정점은 00번부터 N−1N-1번까지 번호가 매겨져 있다. 간선에는 음이 아닌 정수 가중치가 매겨져 있다.

다음 두 종류의 쿼리를 처리해야 한다.

  • 1 u v w x: 정점 uu와 vv를 잇는 간선을 제거하고, 정점 vv와 ww를 잇는 가중치 xx의 간선을 추가한다. uu와 vv를 잇는 간선이 존재함이 보장된다. 연산을 수행한 뒤에도 그래프가 여전히 트리임이 보장된다. (0≤x≤100 0000 \le x \le 100\,000)
  • 2 k x1 x2 ... xk: 정점 x1,x2,…,xkx_1, x_2, \ldots, x_k에 대해, 모든 1≤i<j≤k1 \le i < j \le k인 xix_i와 xjx_j를 잇는 유일한 단순 경로를 생각한다. 이 단순 경로들을 이루는 간선의 합집합에 포함된 모든 간선의 가중치 합을 출력한다. 모든 xix_i는 서로 다르다. (1≤k≤n1 \le k \le n)

입력

첫째 줄에 트리의 크기 NN이 주어진다. (2≤N≤100 0002 \le N \le 100\,000)

이어지는 N−1N-1개의 줄에 세 정수 uu, vv, ww가 주어진다. 이는 정점 uu와 vv를 잇는 가중치 ww의 간선이 존재함을 뜻한다. (0≤u,v≤N−10 \le u, v \le N-1, 0≤w≤100 0000 \le w \le 100\,000)

다음 줄에 쿼리의 개수 QQ가 주어진다. (1≤Q≤100 0001 \le Q \le 100\,000)

이어지는 QQ개의 줄에 위에서 설명한 쿼리가 주어진다.

2번 쿼리의 kk의 합은 1 이상 100,000 이하이다.

출력

2번 쿼리의 결과를 순서대로 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    7
    0 1 1
    0 2 2
    1 3 3
    1 4 4
    2 5 5
    2 6 6
    4
    1 1 4 5 7
    2 3 0 4 6
    1 0 2 1 8
    2 3 0 4 6
    
    예상 출력
    20
    27