동기화
시간 제한8초메모리 제한128 MB
트리의 간선이 시간에 따라 켜지고 꺼질 때, 마지막 시점에 각 질의 서버가 보유한 서로 다른 정보의 개수를 구한다.
문제
어떤 회사가 전 세계에 대의 서버를 운영한다. 각 서버는 처음에 서로 다른 정보 조각을 하나씩 가지고 있다. 즉 서버 는 정보 를 가지며, 같은 조각을 처음부터 가진 서버는 없다.
회사는 정보를 공유하기 위해 서버들을 통신 회선으로 연결한다. 현재 활성화된 회선을 통해 두 서버가 서로에게 도달할 수 있게 되면 두 서버는 동기화된다. 동기화가 끝나면 같은 연결 그룹에 속한 모든 서버는 그 그룹의 어떤 서버가 가지고 있던 조각 전체의 합집합을 갖는다. 다시 말해, (직접 또는 간접으로) 연결된 서버들은 항상 완전히 같은 조각 집합을 공유한다.
비용을 줄이기 위해 회선은 총 개만 설치하며, 이 회선들이 모두 동시에 활성화되면 서버들은 하나의 트리를 이룬다(임의의 두 서버 사이에 단순 경로가 정확히 하나 존재한다).
시각 에는 어떤 회선도 활성화되어 있지 않다. 일부 회선은 열악한 환경을 지나기 때문에 끊어졌다가 다시 복구될 수 있다. 각 시각 ()에는 정확히 하나의 회선 상태가 바뀐다. 그 회선이 현재 비활성이면 활성화되고, 활성이면 비활성화된다. 시각 의 변경으로 발생한 모든 동기화는 시각 이전에 완료된다.
중요: 정보는 절대 사라지지 않는다. 활성 회선이 끊겨 하나의 그룹이 둘로 나뉘어도 나뉜 양쪽은 각자 이미 가지고 있던 조각을 그대로 유지한다.
번의 변경을 모두 적용한 뒤, 지정된 여러 서버 각각에 대해 그 서버가 가진 서로 다른 정보 조각의 개수를 구하라.
입력
입력은 표준 입력으로 다음 형식으로 주어진다.
- 첫 번째 줄에 세 정수 , , 가 주어진다. 각각 서버의 수, 회선 상태 변경 횟수, 질의할 서버의 수이다.
- 이어지는 개의 줄 중 번째 줄에 두 정수 , ()가 주어진다. 회선 는 활성화되면 서버 와 서버 를 연결한다.
- 이어지는 개의 줄 중 번째 줄에 정수 ()가 주어진다. 시각 에 회선 의 상태가 토글된다.
- 이어지는 개의 줄 중 번째 줄에 정수 ()가 주어진다. 모든 변경이 끝난 뒤 서버 가 가진 서로 다른 조각의 개수를 출력해야 한다.
출력
개의 줄을 출력한다. 번째 줄에는 모든 번의 변경이 끝난 뒤 서버 가 가진 서로 다른 정보 조각의 개수를 정수 하나로 출력한다.
제한
- .
- .
- .
- 이고 ().
- ().
- ().
- 모든 는 서로 다르다.
- 모든 회선이 동시에 활성화되면 서버들은 서로 연결된다(개의 회선이 트리를 이룬다).
예제 설명
서버가 대인 첫 번째 예제를 생각하자. 처음에 서버 는 조각 를 가진다().
- 시각 : 회선 이 활성화되어 서버 과 가 연결된다. 두 서버 모두 를 가진다.
- 시각 : 회선 가 활성화되어 서버 과 이 연결된다. 회선 과 함께 서버 , , 이 연결되어 모두 을 가진다.
- 시각 : 회선 이 끊어진다(직전까지 활성 상태였다). 서버 과 는 더 이상 서로 도달할 수 없지만 각자 을 그대로 유지한다.
- 시각 : 회선 가 활성화되어 서버 와 가 연결된다. 두 서버 모두 를 가진다. 회선 이 끊겨 있으므로 서버 에는 도달할 수 없다.
- 시각 : 회선 가 끊어진다. 서버 와 는 각자 를 유지한다.
- 시각 : 회선 이 활성화되어 서버 와 가 연결된다. 두 서버 모두 를 가진다.
결국 서버 , , 는 각각 개, 개, 개의 서로 다른 조각을 가지며, 이는 첫 번째 예제의 출력과 일치한다.