방향 비순환 그래프
시간 제한5초메모리 제한512 MB
방향 비순환 그래프에서 노드 u로부터 도달 가능한 모든 노드의 값을 대입하거나 최솟값으로 갱신하고, 특정 노드의 현재 값을 출력합니다.
문제
최근 Rikka는 방향 비순환 그래프(DAG)를 다루는 자료 구조에 큰 관심을 갖게 되었다. 그녀는 가중 체인 분해 같은 트리 기반의 고전 알고리즘을 DAG 버전으로 확장하면 정말 멋질 것이라고 꿈꾼다.
이제 그녀는 간단한 문제를 하나 떠올렸고, 이 문제를 함께 풀자며 당신을 초대한다.
정점 개와 간선 개로 이루어진 DAG 가 주어진다. 각 정점 는 음이 아닌 정수 값 를 가진다. 처음에는 모든 값이 이다.
Rikka는 다음 세 종류의 연산을 번 수행하려고 한다.
- 와 가 주어지면, 에서 도달 가능한 모든 에 대해 를 로 설정한다.
- 와 가 주어지면, 에서 도달 가능한 모든 에 대해 를 로 설정한다.
- 가 주어지면, 현재의 를 출력한다.
정점 가 에서 도달 가능하다는 것은, 에서 시작해 에서 끝나는 경로가 존재한다는 뜻이다. 경로는 정점 나열 이며, 각 에 대해 를 만족한다.
이 연산들을 충분히 빠르게 처리할 수 있겠는가?
입력
첫 줄에 세 정수 , , ()가 주어진다.
이어지는 개의 줄에는 각각 두 정수 , 가 주어지며, 이는 그래프의 간선 를 나타낸다 (). 입력 그래프가 DAG임이 보장된다.
이어지는 개의 줄에는 다음 중 하나의 형식으로 연산이 주어진다.
1 u x: 첫 번째 종류의 연산이다.2 u x: 두 번째 종류의 연산이다.3 u: 세 번째 종류의 연산이다.
모든 매개변수는 , 을 만족한다.
출력
세 번째 종류의 연산마다 한 줄에 정수 하나를 출력한다. 그 정수는 현재의 값이다.