만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

무한 XYZ

시간 제한1초메모리 제한256 MB

요약
x, y, z 레이블이 붙은 방향 그래프에 간선을 하나씩 추가할 때마다, 레이블이 xyz 순서로 무한히 이어지는 경로가 있는지 판별합니다.
난이도

보통10점 중 7점

유형
그래프, 위상 정렬, 분할 정복
정답자
아직 제출이 없습니다

문제

정점 NN개와 단방향 간선 MM개로 이루어진 유향 그래프가 있다. 같은 출발점과 도착점 사이에 간선이 여러 개 있을 수 있으며, 간선의 출발점과 도착점이 같을 수도 있다.

각 간선에는 xx, yy, zz 중 하나의 문자가 쓰여 있다. 한 정점에서 뻗어 나가는 간선들의 문자는 서로 겹치지 않는다.

다음과 같은 쿼리가 주어진다.

  • ss ee cc: 출발점이 ss이고 도착점이 ee이며 문자가 cc인 단방향 간선을 그래프에 새로 추가한다. 새 간선의 문자는 기존 간선과 겹칠 수 있다. 이때, 어떤 정점에서 출발해 그래프 위를 무한히 이동할 수 있으면 1, 그렇지 않으면 0을 출력한다.

이동에는 특별한 규칙이 있다. xx 간선 다음에는 yy 간선, yy 간선 다음에는 zz 간선, zz 간선 다음에는 xx 간선을 타고 이동해야 한다. 즉, 문자 순서는 xyzxyz⋯xyzxyz\cdots, yzxyzx⋯yzxyzx\cdots, zxyzxy⋯zxyzxy\cdots 중 하나의 형태로만 이어질 수 있다.

쿼리는 QQ개 주어진다. 각 쿼리는 독립적이며, 앞선 쿼리에서 추가된 간선은 뒤의 쿼리에 적용되지 않는다.

입력

첫 번째 줄에 NN, MM, QQ가 주어진다. (1≤N≤1000001 \leq N \leq 100000, 1≤M≤3×N1 \leq M \leq 3 \times N, 1≤Q≤1000001 \leq Q \leq 100000)

둘째 줄부터 M+1M + 1번째 줄까지 간선 정보 SiS_i, EiE_i, CiC_i가 주어진다. 이는 SiS_i에서 EiE_i로 가는, 문자 CiC_i가 쓰인 간선을 뜻한다. (1≤Si,Ei≤N1 \leq S_i, E_i \leq N, Ci∈{x,y,z}C_i \in \{x,y,z\})

M+2M + 2번째 줄부터 M+Q+1M + Q + 1번째 줄까지 쿼리 정보 ss, ee, cc가 주어진다. (1≤s,e≤N1 \leq s, e \leq N, c∈{x,y,z}c \in \{x,y,z\})

출력

QQ줄에 걸쳐 ii번째 줄에 ii번째 쿼리의 답을 출력한다. 무한히 이동할 수 있으면 1, 그렇지 않으면 0을 출력한다.

예제3

  1. 예제 1

    입력
    2 1 1
    1 2 x
    1 2 x
    
    예상 출력
    0
    
  2. 예제 2

    입력
    3 3 3
    1 2 x
    2 3 y
    3 1 z
    1 2 x
    2 3 x
    3 1 x
    
    예상 출력
    1
    1
    1
    
  3. 예제 3

    입력
    5 2 3
    1 2 x
    2 3 y
    1 2 x
    3 1 z
    3 2 y
    
    예상 출력
    0
    1
    0