만드는 중입니다

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

산적

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

요약
가중치가 있는 트리에서 마을 X로부터 거리 R 안에 드는 도로에 계약을 더하고, 특정 도로를 보호하는 계약 수를 묻는 질의에 답합니다.
난이도

어려움10점 중 9점

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

문제

한 왕국에는 마을이 NN개 있고, 양방향 도로가 N−1N-1개 있습니다. 어떤 두 마을 사이든 하나 이상의 도로로 이루어진 경로로 오갈 수 있습니다. ii번째 도로는 마을 AiA_i와 BiB_i를 잇고, 길이는 CiC_i입니다.

상인들이 산적의 공격을 받는 일이 늘어나자, 왕은 자문관에게 충성스러운 무리를 경비 업체처럼 고용해 이 문제를 해결하라고 지시했습니다. 각 경비 계약은 본부가 있는 마을 XjX_j를 중심으로 반경 RjR_j 안에 있는 모든 도로의 안전을 보장합니다. 도로가 계약으로 보호되려면, XjX_j에서 다른 어떤 마을까지 길이가 RjR_j 이하인 경로의 일부여야 합니다. 도로 하나가 여러 계약으로 보호될 수 있으며, 그만큼 더 안전해집니다.

새 계약에 대한 쿼리를 처리하고, 개별 도로에 대해 현재 그 도로를 보호하는 계약 수를 답해야 합니다.

입력

첫 줄에 마을 수 NN이 주어집니다. 이어지는 N−1N-1개의 줄에는 마을 AiA_i와 BiB_i를 잇고 길이가 CiC_i인 도로를 나타내는 정수 AiA_i, BiB_i, CiC_i가 공백으로 구분되어 주어집니다.

다음 줄에는 쿼리 수 QQ가 주어집니다. 이어지는 QQ개의 줄은 쿼리를 나타냅니다. 새 경비 계약을 추가하는 쿼리는 문자 +로 시작하며, 본부 마을 XjX_j와 반경 RjR_j가 뒤따릅니다. 도로의 안전도를 묻는 쿼리는 문자 ?로 시작하며, 그 도로 번호 YjY_j가 뒤따릅니다. 도로 번호는 입력에 주어진 순서대로 11부터 N−1N-1까지입니다.

출력

? 쿼리마다 처리한 순서대로, 도로 YjY_j를 현재 보호하고 있는 계약의 수를 한 줄에 출력합니다.

제한

  • 1≤N,Q≤1051 \leq N, Q \leq 10^5
  • 0≤Ci,Rj≤1090 \leq C_i, R_j \leq 10^9

예제1

  1. 예제 1

    입력
    7
    1 2 4
    4 2 7
    5 1 3
    3 6 4
    1 6 9
    2 7 1
    7
    + 2 6
    ? 3
    ? 1
    + 6 14
    ? 1
    ? 2
    ? 3
    
    예상 출력
    0
    1
    2
    0
    1