만드는 중입니다

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

그래프 여행자

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

요약
각 질의 (x, y)에서 출발해 c의 누적값에 따라 간선을 고르는 이동이 무한히 방문하는 서로 다른 정점의 개수를 구합니다.
난이도

어려움10점 중 8점

유형
그래프, 유니온 파인드, 수학
정답자
아직 제출이 없습니다

문제

Gildong은 Graph Traveler라는 기계를 실험하고 있다. Graph Traveler에는 1부터 nn까지 번호가 붙은 nn개의 정점으로 이루어진 방향 그래프가 있다. ii번째 정점에는 mim_i개의 나가는 간선이 있으며, 각 간선은 ei[0],ei[1],ldots,ei[mi−1]e_i[0], e_i[1], \\ldots, e_i[m_i-1]로 표시되고 도착 정점을 나타낸다. 그래프에는 다중 간선과 자기 루프가 있을 수 있다. ii번째 정점에는 정수 kik_i가 적혀 있다.

여행은 다음과 같이 진행된다.

  1. Gildong이 시작 정점과 정수를 고른다. 변수 cc를 이 정수로 둔다.
  2. 정점 ii에 도착하거나 정점 ii에서 여행을 시작하면 cc에 kik_i를 더한다.
  3. 다음 정점은 0lexlemi−10 \\le x \\le m_i-1이고 xequivcpmodmix \\equiv c \\pmod{m_i}를 만족하는 정수 xx에 대한 ei[x]e_i[x]이다. 그 정점으로 이동한 뒤 2단계로 돌아간다.

2단계와 3단계가 끝없이 반복되므로 여행은 끝나지 않는다. 예를 들어 Gildong이 c=5c=5로 정점 1에서 시작하고, m1=2m_1=2, e1[0]=1e_1[0]=1, e1[1]=2e_1[1]=2, k1=−3k_1=-3이라고 하자. 시작하자마자 cc는 2가 된다. 0lexle10 \\le x \\le 1이고 xequivcpmod2x \\equiv c \\pmod{2}를 만족하는 정수는 0뿐이므로 정점 e1[0]=1e_1[0]=1로 이동한다. 정점 1에 다시 도착하면 cc는 -1이 된다. 조건을 만족하는 xx는 1이므로 정점 e1[1]=2e_1[1]=2로 이동하며, 이후도 같은 방식으로 진행된다.

Gildong은 호기심이 많아서 질의 qq개를 던진다. 각 질의에서 그는 어떤 정점에서 특정한 cc 값으로 여행을 시작했을 때, 무한히 많이 방문되는 서로 다른 정점이 몇 개인지 알고 싶어 한다. 유한 번만 방문되는 정점은 세지 않는다.

입력

첫 줄에 정점의 개수 nn (1lenle10001 \\le n \\le 1000)이 주어진다.

둘째 줄에는 nn개의 정수가 주어진다. ii번째 정수는 kik_i (−109lekile109-10^9 \\le k_i \\le 10^9)이다.

이어지는 2n2n개의 줄은 간선을 나타낸다. (2i+1)(2i+1)번째 줄에는 정점 ii의 나가는 간선 수 mim_i (1lemile101 \\le m_i \\le 10)가 주어진다. (2i+2)(2i+2)번째 줄에는 ei[0],ei[1],ldots,ei[mi−1]e_i[0], e_i[1], \\ldots, e_i[m_i-1]이 주어지며, 각 값은 1 이상 nn 이하이다.

다음 줄에는 질의의 개수 qq (1leqle1051 \\le q \\le 10^5)가 주어진다. 이어지는 qq개의 줄에는 정수 xx, yy (1lexlen1 \\le x \\le n, −109leyle109-10^9 \\le y \\le 10^9)가 주어지며, 이는 정점 xx에서 c=yc=y로 여행을 시작한다는 뜻이다.

출력

각 질의에 대해 무한히 많이 방문되는 서로 다른 정점의 개수를 한 줄에 하나씩 출력한다.

힌트

첫 번째 입력의 그래프는 아래 그림과 같다. 각 정점에는 정점 번호 ii, 정수 kik_i, 간선 수 mim_i 세 값이 표시되어 있다. 나가는 간선에는 간선 번호가 적혀 있다.

첫 번째 입력의 각 질의에서 여행은 다음과 같이 진행된다. 각 단계는 "정점(k_i를 더한 뒤의 c)" 형식으로 적었다.

  • 1(0)to2(0)to2(0)toldots1(0)\\to 2(0)\\to 2(0)\\to\\ldots
  • 2(0)to2(0)toldots2(0)\\to 2(0)\\to\\ldots
  • 3(−1)to1(−1)to3(−1)toldots3(-1)\\to 1(-1)\\to 3(-1)\\to\\ldots
  • 4(−2)to2(−2)to2(−2)toldots4(-2)\\to 2(-2)\\to 2(-2)\\to\\ldots
  • 1(1)to3(1)to4(1)to1(1)toldots1(1)\\to 3(1)\\to 4(1)\\to 1(1)\\to\\ldots
  • 1(5)to3(5)to1(5)toldots1(5)\\to 3(5)\\to 1(5)\\to\\ldots

두 번째 입력은 같은 그래프이지만 정점의 값이 0이 아니므로 답이 달라진다.

두 번째 입력의 여행은 다음과 같다.

  • 1(4)to2(−1)to2(−6)toldots1(4)\\to 2(-1)\\to 2(-6)\\to\\ldots
  • 2(−5)to2(−10)toldots2(-5)\\to 2(-10)\\to\\ldots
  • 3(−4)to1(0)to2(−5)to2(−10)toldots3(-4)\\to 1(0)\\to 2(-5)\\to 2(-10)\\to\\ldots
  • 4(−3)to1(1)to3(−2)to4(−3)toldots4(-3)\\to 1(1)\\to 3(-2)\\to 4(-3)\\to\\ldots
  • 1(5)to3(2)to1(6)to2(1)to2(−4)toldots1(5)\\to 3(2)\\to 1(6)\\to 2(1)\\to 2(-4)\\to\\ldots
  • 1(9)to3(6)to2(1)to2(−4)toldots1(9)\\to 3(6)\\to 2(1)\\to 2(-4)\\to\\ldots

예제2

  1. 예제 1

    입력
    4
    0 0 0 0
    2
    2 3
    1
    2
    3
    2 4 1
    4
    3 1 2 1
    6
    1 0
    2 0
    3 -1
    4 -2
    1 1
    1 5
    
    예상 출력
    1
    1
    2
    1
    3
    2
    
  2. 예제 2

    입력
    4
    4 -5 -3 -1
    2
    2 3
    1
    2
    3
    2 4 1
    4
    3 1 2 1
    6
    1 0
    2 0
    3 -1
    4 -2
    1 1
    1 5
    
    예상 출력
    1
    1
    1
    3
    1
    1