가벼운 간선과 무거운 간선
시간 제한2초메모리 제한1024 MB
각 갱신은 a와 b 사이 경로를 무거운 간선으로 만들고, 경로 위 정점에 붙은 나머지 간선을 가벼운 간선으로 되돌린다. 질의는 두 정점 사이 경로의 무거운 간선 수를 구한다.
문제
정점이 개인 트리가 주어진다. 트리의 각 간선은 가벼운 간선 또는 무거운 간선이다. 이 트리에 대해 개의 연산을 수행해야 한다. 처음에는 모든 간선이 가벼운 간선이다. 연산은 두 종류이다.
-
두 정점 와 가 주어진다. 와 를 잇는 경로 위의 모든 정점 (와 자신을 포함한다)에 대해, 에 연결된 모든 간선을 가벼운 간선으로 바꾼다. 또한 와 를 잇는 경로 위의 모든 간선을 무거운 간선으로 바꾼다.
-
두 정점 와 가 주어진다. 와 를 잇는 경로에 있는 무거운 간선의 개수를 구한다.
입력
첫 줄에 테스트 케이스의 개수 가 주어진다. 각 테스트 케이스의 첫 줄에는 정점의 개수 과 연산의 개수 이 주어진다.
다음 개의 줄에는 트리의 간선 , 가 한 줄에 하나씩 주어진다.
다음 개의 줄에는 연산 , , 가 한 줄에 하나씩 주어진다. 이면 첫 번째 종류의 연산이고, 이면 두 번째 종류의 연산이다.
모든 연산에서 이다.
출력
두 번째 종류의 연산마다 답을 한 줄에 하나씩 출력한다.
제한
모든 테스트 데이터에 대해 이고, 이다.