AP 위의 수업은?
시간 제한2초메모리 제한1024 MB
가중치 트리에서 집합 S를 동적으로 갱신하며, 한 정점에서 S의 모든 정점까지 거리의 합과 경로 합집합의 가중치를 구한다.
문제
AP 위의 수업은? 온라인 수업
MatKor의 규모가 점점 커지면서, MatKor 세미나도 온라인으로 진행하고자 한다. 민재는 세미나를 위해 네트워크를 설계했다. 네트워크는 명의 부원이 각자 한 개의 정점에 위치하고, 정점들 사이의 무방향 간선으로 통신할 수 있는 트리(사이클이 없는 연결 그래프) 형태이다. 편의상 모든 정점들의 집합을 , 모든 간선들의 집합을 라고 하자. 간선들은 해당 간선을 사용하기 위한 비용이 있는데, 간선 의 비용을 로 정의한다.
명의 부원과 개의 노드는 각각 번부터 번까지 번호가 매겨져 있으며, 번 부원은 번 노드에 위치한다. 초기에 명이 세미나를 신청했으며, 이 부원들이 위치한 정점들의 집합을 라고 하자.
두 정점 에 대해 는 와 사이 경로의 간선들의 집합을 의미하며, 는 와 사이 경로의 비용의 합 즉, 을 의미한다. 이때 라면 이며, 이다.
이제 민재는 개의 정점 중 한 곳에서 세미나를 송출할 것인데, 세미나를 듣는 모든 부원까지 도달하기까지 총 비용이 얼마나 되는지를 알고 싶다. 이때 중복되는 간선에 대해 중복되는 횟수만큼 비용을 더하는 경우와 한 번만 더하는 경우 모두 알고 싶다. 중복되는 횟수만큼 비용을 더하는 경우를 트래픽합, 한 번만 더하는 경우를 하드웨어합이라 정의힌다. 세미나를 진행하는 도중 신청하지 않았던 인원이 새로 신청할 수도, 신청했던 인원이 신청을 취소할 수도 있으므로 이를 실시간으로 반영하여 계산해야 한다.
민재는 이를 해결하기 위해 다음 세 종류의 쿼리를 수행하는 프로그램을 작성하면 된다는 사실을 알았다.
1: 번 부원이 세미나 신청 여부를 반전시킨다. 즉, 라면 S\leftarrow S\setminus\left\\{ v \right\\}를, 라면 S\leftarrow S\cup\left\\{ v \right\\}를 에 반영한다.2: 번 부원이 위치한 정점에서 세미나를 송출했을 때 트래픽합을 출력한다. 즉, 를 출력한다.3: 번 부원이 위치한 정점에서 세미나를 송출했을 때 하드웨어합을 출력한다. 즉, 이라 할 때, 를 출력한다.
위의 세 종류의 쿼리를 수행하는 프로그램을 작성해 보자.
입력
첫 번째 줄에 부원의 수 과 초기에 세미나를 신청한 부원의 수 과 쿼리의 개수 이 공백으로 구분되어 주어진다.
두 번째 줄에 초기에 세미나를 신청한 명의 서로 다른 번호 가 오름차순으로 공백으로 구분되어 주어진다. 이때, 이라면 빈 줄이 주어진다.
세 번째 줄부터 줄에 걸쳐 트리의 간선 를 구성하는 두 정점 와 간선의 비용 가 공백으로 구분되어 주어진다.
다음 줄에 각 쿼리의 타입을 의미하는 개의 정수 가 공백으로 구분되어 주어진다.
각 개의 쿼리에 대해 다음과 같이 가 결정된다.
-
첫 번째 쿼리()의 경우 이다.
-
두 번째 쿼리부터는 번째 쿼리의 정점 는 다음과 같이 직전 쿼리(번째 쿼리)에 의해 결정된다.
- 번째 쿼리가 번 쿼리 였다면, 번째 쿼리 실행 후 의 원소의 개수를 라 할 때,
- 번째 쿼리가 번 혹은 번 쿼리 였다면, 번째 쿼리의 답이 라 할 때,
출력
번 혹은 번 쿼리가 주어질 때마다 정답을 한 줄에 한 개씩 출력한다. 번 혹은 번 쿼리가 하나 이상 주어짐이 보장된다.