Ald
시간 제한4초메모리 제한2048 MB
트리에서 경로를 추가하고 삭제하는 쿼리를 처리하며, 모든 경로로부터 거리가 d 이하인 정점의 수를 구합니다.
문제
트리가 주어진다. 트리는 부터 까지 번호가 붙은 개의 정점으로 이루어져 있다.
정점 와 사이의 경로를 로 나타낸다. 경로의 -집합은 경로 위의 정점 중 하나로부터 거리가 인 트리의 모든 정점으로 이루어진 집합이다. 예를 들어 경로의 -집합은 경로의 정점 집합 자체이다. 두 정점 사이의 거리는 두 정점을 잇는 경로의 간선 수이다.
를 트리 경로들의 다중집합이라고 하자. 처음에 는 비어 있다. 다음 쿼리를 처리하라.
- 1 : 경로 를 에 추가한다 ().
- 2 : 에서 경로 하나를 삭제한다 (). 와 는 같은 경로를 나타낸다. 예를 들어 일 때 2 3 2 쿼리를 수행하면 이 된다. 이 쿼리를 수행하기 전에 또는 가 에 적어도 하나 있음이 보장된다.
- 3 : 에 있는 모든 경로의 -집합의 교집합 크기를 출력한다 (). 가 비어 있으면 을 출력한다.
입력
첫 줄에 테스트 케이스의 수 가 주어진다 (). 각 테스트 케이스의 첫 줄에는 정점의 수 과 쿼리의 수 가 주어진다 (). 이어서 개의 줄에 번째 간선의 양 끝점 , 가 주어진다. 마지막으로 개의 줄에 위에서 설명한 형식의 쿼리가 주어진다. 모든 테스트 케이스에 걸쳐 의 합은 를 넘지 않으며, 의 합도 를 넘지 않는다.
출력
3번 유형의 쿼리마다 답을 한 줄에 하나씩 출력한다.