흰 정점 사이의 최장 거리

정점이 흰색과 검은색을 오가는 트리에서 색이 바뀔 때마다 두 흰 정점 사이 거리의 최댓값을 구한다. 간선 길이는 음수일 수 있다.

어려움8트리분할 정복세그먼트 트리그리디아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

N개의 정점으로 이루어진 트리가 주어진다. 트리는 사이클이 없는 연결된 무방향 그래프다. 정점은 1번부터 N번까지, 간선은 1번부터 N-1번까지 번호가 붙어 있다. 처음에는 모든 정점이 흰색이다.

각 간선에는 정수 거리가 붙어 있고, 음수일 수도 있다. 두 정점 a와 b의 거리는 a에서 b로 가는 트리 경로에 놓인 간선 거리의 합이다. a와 b가 같은 정점이면 거리는 0이다.

아래 두 종류의 쿼리를 처리하는 프로그램을 작성하시오.

  • 1 i: i번 정점의 색을 뒤집는다. 흰색이면 검은색으로, 검은색이면 흰색으로 바꾼다.
  • 2: 흰색 정점 a와 b를 고르는 모든 경우에 대해 거리의 최댓값을 출력한다. a와 b는 같아도 된다. 흰색 정점이 하나도 없으면 -1을 출력한다.

입력

첫째 줄에 정점의 개수 N이 주어진다. (2N1000002 \le N \le 100\,000)

다음 N-1개의 줄에는 i번 간선이 잇는 두 정점 번호 u와 v, 그리고 간선의 거리 w가 주어진다. (1u,vN1 \le u, v \le N, uvu \ne v, 1000w1000-1\,000 \le w \le 1\,000)

다음 줄에 쿼리의 개수 M이 주어진다. (1M1000001 \le M \le 100\,000)

다음 M개의 줄에는 쿼리가 한 줄에 하나씩 주어진다. 1번 쿼리는 1 i 형식이고 (1iN1 \le i \le N), 2번 쿼리는 2 하나로만 이루어진다.

출력

2번 쿼리마다 답을 입력에 주어진 순서대로 한 줄에 하나씩 출력한다.