아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

방향 비순환 그래프

시간 제한5초메모리 제한512 MB

요약
방향 비순환 그래프에서 노드 u로부터 도달 가능한 모든 노드의 값을 대입하거나 최솟값으로 갱신하고, 특정 노드의 현재 값을 출력합니다.
난이도

어려움10점 중 9점

유형
그래프, 위상 정렬, 세그먼트 트리
정답자
아직 제출이 없습니다

문제

최근 Rikka는 방향 비순환 그래프(DAG)를 다루는 자료 구조에 큰 관심을 갖게 되었다. 그녀는 가중 체인 분해 같은 트리 기반의 고전 알고리즘을 DAG 버전으로 확장하면 정말 멋질 것이라고 꿈꾼다.

이제 그녀는 간단한 문제를 하나 떠올렸고, 이 문제를 함께 풀자며 당신을 초대한다.

정점 nn개와 간선 mm개로 이루어진 DAG GG가 주어진다. 각 정점 uu는 음이 아닌 정수 값 valu\mathit{val}_u를 가진다. 처음에는 모든 값이 00이다.

Rikka는 다음 세 종류의 연산을 qq번 수행하려고 한다.

  1. uu와 xx가 주어지면, uu에서 도달 가능한 모든 vv에 대해 valv\mathit{val}_v를 xx로 설정한다.
  2. uu와 xx가 주어지면, uu에서 도달 가능한 모든 vv에 대해 valv\mathit{val}_v를 min⁡{valv,x}\min\{\mathit{val}_v, x\}로 설정한다.
  3. uu가 주어지면, 현재의 valu\mathit{val}_u를 출력한다.

정점 vv가 uu에서 도달 가능하다는 것은, uu에서 시작해 vv에서 끝나는 경로가 존재한다는 뜻이다. 경로는 정점 나열 p1,p2,…,pkp_1, p_2, \ldots, p_k이며, 각 i=1,2,…,k−1i = 1, 2, \ldots, k-1에 대해 (pi,pi+1)∈G(p_i, p_{i+1}) \in G를 만족한다.

이 연산들을 충분히 빠르게 처리할 수 있겠는가?

입력

첫 줄에 세 정수 nn, mm, qq (1≤n,m,q≤1051 \le n, m, q \le 10^5)가 주어진다.

이어지는 mm개의 줄에는 각각 두 정수 xx, yy가 주어지며, 이는 그래프의 간선 (x,y)(x, y)를 나타낸다 (1≤x,y≤n1 \le x, y \le n). 입력 그래프가 DAG임이 보장된다.

이어지는 qq개의 줄에는 다음 중 하나의 형식으로 연산이 주어진다.

  • 1 u x: 첫 번째 종류의 연산이다.
  • 2 u x: 두 번째 종류의 연산이다.
  • 3 u: 세 번째 종류의 연산이다.

모든 매개변수는 1≤u≤n1 \le u \le n, 0≤x≤1090 \le x \le 10^9을 만족한다.

출력

세 번째 종류의 연산마다 한 줄에 정수 하나를 출력한다. 그 정수는 현재의 valu\mathit{val}_u 값이다.

예제1

  1. 예제 1

    입력
    4 4 7
    1 2
    1 3
    3 4
    2 4
    1 1 5
    1 2 1
    3 3
    3 4
    2 1 3
    3 2
    3 3
    
    예상 출력
    5
    1
    1
    3