만드는 중입니다

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

마을과 도로

시간 제한2초메모리 제한512 MB

요약
마을들이 트리 형태로 주어질 때, 도로를 닫거나 다시 열고 로봇을 옮기는 질의를 처리합니다. 열린 도로만 따졌을 때 로봇에서 가장 먼 마을들을 출력합니다.
난이도

어려움10점 중 8점

유형
트리, 최단 경로, 그래프, 분할 정복
정답자
아직 제출이 없습니다

문제

nn개의 마을과 n−1n - 1개의 양방향 도로가 있다. 마을은 11부터 nn까지, 도로는 11부터 n−1n - 1까지 번호가 매겨져 있다. ii번 도로는 마을 a_ia\_i와 마을 b_ib\_i를 잇고, 길이는 d_id\_i이다.

처음에는 모든 도로가 열려 있으며, 어느 마을에서든 하나 이상의 도로를 거쳐 다른 모든 마을에 도달할 수 있다.

로봇이 마을 11에 있다.

qq개의 질의를 처리해야 한다. 각 질의는 다음 세 가지 유형 중 하나이다.

  • 1 xx: 로봇을 마을 xx로 옮긴다. 이 시점에 로봇이 있는 마을과 마을 xx는 열려 있는 도로 하나로 직접 연결되어 있음이 보장된다.
  • 2 yy: 도로 yy를 닫는다. 이 시점에 도로 yy는 열려 있음이 보장된다.
  • 3 zz: 도로 zz를 다시 연다. 이 시점에 도로 zz는 닫혀 있음이 보장된다.

각 질의 직후에, 열려 있는 도로만 고려했을 때 로봇이 현재 있는 마을에서 가장 먼 마을들을 출력한다.

입력

첫 줄에 마을의 수 nn이 주어진다 (1≤n≤2⋅1051 \le n \le 2 \cdot 10^5).

이어지는 n−1n - 1개의 줄에 ii번째 도로의 정보인 두 마을 번호 a_ia\_i, b_ib\_i와 길이 d_id\_i가 주어진다 (1≤a_i,b_i≤n1 \le a\_i, b\_i \le n, a_i≠b_ia\_i \ne b\_i, 1≤d_i≤1061 \le d\_i \le 10^6). 어느 마을에서든 하나 이상의 도로를 거쳐 다른 모든 마을에 도달할 수 있음이 보장된다.

다음 줄에 qq가 주어진다 (1≤q≤2⋅1051 \le q \le 2 \cdot 10^5). 이후 qq개의 질의가 한 줄에 하나씩 주어진다.

출력

qq개의 줄을 출력한다. ii번째 줄에는 ii번째 질의 직후 로봇이 있는 마을에서 가장 먼 마을의 개수 c_ic\_i를 먼저 쓰고, 이어서 그 마을 번호들을 오름차순으로 같은 줄에 출력한다.

모든 테스트에서 올바른 답의 c_ic\_i를 모두 더한 값이 4⋅1054 \cdot 10^5을 넘지 않음이 보장된다.

예제2

  1. 예제 1

    입력
    6
    2 4 1
    1 2 1
    4 6 1
    2 3 1
    4 5 1
    5
    2 5
    2 3
    1 2
    3 5
    1 4
    
    예상 출력
    1 6
    2 3 4
    3 1 3 4
    1 5
    2 1 3
    
  2. 예제 2

    입력
    5
    3 4 1
    2 1 1
    4 5 1
    3 2 1
    6
    2 2
    3 2
    1 2
    1 3
    2 4
    1 4
    
    예상 출력
    1 1
    1 5
    1 5
    2 1 5
    1 5
    2 3 5