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

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

트리 헐

시간 제한3초메모리 제한256 MB

요약
트리 정점 집합에 정점을 넣고 빼는 질의를 처리하면서, 매 질의 후 현재 집합을 모두 포함하는 최소 부분 트리의 간선 가중치 합을 구한다.
난이도

어려움10점 중 8점

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

문제

가중치가 있는 트리가 주어진다.

트리의 정점 부분집합 AA를 생각하자. 처음에 AA는 공집합이고, AA에 정점을 추가하거나 AA에서 정점을 제거하는 질의를 처리해야 한다.

각 질의를 처리한 뒤, AA의 모든 정점을 포함하는 최소 부분트리의 가중치를 구하라. 부분트리의 가중치는 그 간선들의 가중치 합으로 정의한다.

입력

첫째 줄에 트리의 크기 nn이 주어진다 (1≤n≤3⋅1051 \le n \le 3 \cdot 10^{5}).

다음 n−1n-1개 줄에 트리의 간선이 주어진다. 각 간선은 "uu vv ww" 형태로 주어지며, 양 끝 정점과 가중치를 나타낸다 (1≤u,v≤n1 \le u, v \le n, u≠vu \ne v, 0≤w≤1090 \le w \le 10^{9}). 주어진 간선들이 트리를 이룸이 보장된다.

다음 줄에 질의의 수 qq가 주어진다 (1≤q≤3⋅1051 \le q \le 3 \cdot 10^{5}).

다음 qq개 줄에 질의가 주어진다. 각 질의는 "tt vv" 형태로 주어지며, tt는 "+" (AA에 정점 추가) 또는 "-" (AA에서 정점 제거)이고 vv는 정점 번호이다 (1≤v≤n1 \le v \le n). 이미 AA에 있는 정점을 추가하거나, AA에 없는 정점을 제거하는 질의는 주어지지 않음이 보장된다.

출력

qq개의 수를 출력한다. 각 질의를 처리한 뒤 AA의 모든 정점을 포함하는 최소 부분트리의 가중치를 출력하라. AA가 공집합이면 00을 출력한다.

예제1

  1. 예제 1

    입력
    5
    1 2 1
    2 3 10
    3 4 100
    3 5 1000
    8
    + 2
    + 5
    + 4
    - 5
    + 1
    - 4
    - 2
    - 1
    
    예상 출력
    0
    1010
    1110
    110
    111
    1
    0
    0