색이 있는 트리
시간 제한6초메모리 제한1024 MB
각 연산 뒤에 색이 서로 다른 두 정점 사이 거리의 최댓값을 구합니다. 연산은 잎 정점 추가와 정점 색 변경입니다.
문제
처음에는 색이 인 정점 하나만 있는 트리가 주어집니다. 이후 두 종류의 연산이 순서대로 개 주어집니다.
- : 색이 인 새 정점을 번호 로 트리에 추가합니다. 여기서 은 현재 정점의 개수입니다. 정점 와 을 길이가 인 간선으로 잇습니다.
- : 정점 의 색을 로 바꿉니다.
각 연산 후에, 현재 트리에서 색이 서로 다른 두 정점 , ()를 찾아 두 정점 사이의 거리가 최대가 되도록 해야 합니다.
두 정점 와 의 거리는 트리에서 에서 까지 가는 최단 경로의 길이입니다.
입력
입력에는 여러 개의 테스트 케이스가 들어 있습니다. 첫 줄에는 테스트 케이스의 개수 가 주어집니다. 각 테스트 케이스는 다음과 같습니다.
첫 줄에 연산의 개수 와 정점 의 초기 색 가 주어집니다 (, ).
이어지는 개의 줄에는 순서대로 연산이 정수 3개 또는 4개로 주어집니다.
- 줄에 정수 , , , 가 주어지면 (, , ), 색이 인 새 정점 을 추가하고 길이 인 간선으로 정점 와 연결합니다.
- 줄에 정수 , , 가 주어지면 (, ), 정점 의 색을 로 바꿉니다.
모든 테스트 케이스의 합은 을 넘지 않습니다.
출력
각 연산 후에, 색이 서로 다른 두 정점 사이 거리의 최댓값을 출력합니다. 그런 쌍이 없으면 대신 을 출력합니다.