Coloring Madness

문제 정보

    • 문제 ID
    • 시간 제한
    • 메모리 제한
    • 제출 횟수
    • 정답 횟수 (비율)
    • 출제자
    • 출처
    • 분류

문제

\(N\)개의 정점을 가진 방향성 그래프가 있다. 각 그래프의 정점에 \(1\)에서 \(N\)까지의 번호가 매겨져 있다.
이 그래프에는 \(N \times (N-1)\)개의 간선이 존재하는데, 이는 임의의 서로 다른 두 정점을 연결하는 방향성 간선이 하나씩 있는 것이다. 이 간선을 이용해 \(x\)번 정점에서 \(y\)번 정점으로 이동하는 데에는 \(t_{x, y}\)의 시간이 걸린다. 이 때 \(t_{x, y} \neq t_{y, x}\)일 수도 있음에 유의하라.

또한, 각 정점에는 색이 칠해져 있다. 이 색은 모두 구분이 가능하며, \(N\)가지의 색이 있다. 색에도 \(1\)에서 \(N\)까지의 번호를 붙이도록 한다. 초기에 \(i\)번 정점에 색칠된 색의 번호를 \(C_i\)라고 하자. 경근이는 \(x\)번 정점에서 시작하여 그래프 위를 돌아다니며 정점에 칠해진 색을 바꾸려고 하는데, 그 과정은 다음과 같다 :

  1. 모든 정점이 같은 색으로 칠해져 있다면 과정을 종료한다.
  2. 만약 경근이가 현재 \(i\)번 정점에 있다면, 다음에 이동할 정점으로 \(i\)번 정점과는 다른 \(j\)를 각각 \(\frac{1}{N - 1}\)의 확률로 선택한다.
  3. \(i\)번 정점의 색 \(C_i\)를 \(p\)의 확률로 색 \(C_j\)로 칠한다.
  4. 경근이가 \(j\)번 정점으로 이동한다. 이 때 \(t_{i, j}\)의 시간이 걸린다. 그 후, \(j\)번 정점의 색 \(C_j\)를 \(q\)의 확률로 2번 단계에서의 \(C_i\)로 칠한다. 1번 단계로 돌아간다.

경근이가 색칠하는 과정을 끝내기까지 걸리는 시간의 기댓값을 구하여라.

입력

첫 번째 줄에 정점의 개수를 나타내는 정수 \(N\) (\(1 \le N \le 25\))이 주어진다.

두 번째 줄에 두 개의 정수 \(P\), \(Q\) (\(1 \le P, Q < 10^6\))가 공백으로 구분되어 주어진다. 이는 \(p = \frac{P}{10^6}\), \(q = \frac{Q}{10^6}\)임을 나타낸다.

세 번째 줄부터 \(N\) 개의 줄에 걸쳐 각 줄에 \(N\)개의 정수가 공백으로 구분되어 주어진다. 이 때, \(i\)번째 줄의 \(j\)번째 정수는 \(t_{i, j}\) (\(0 \le t_{i, j} \le 10^6\) 이고 \(t_{i, i}=0\))를 나타낸다.

\(N + 3\)번쨰 줄에 초기 상태의 개수를 나타내는 정수 \(Q\) (\(1 \le Q \le 100\))가 주어진다.

\(N + 4\)번째 줄부터 \(Q\)개의 줄에 걸쳐 각 줄에 \(N + 1\)개의 정수 \(C_1\), \(C_2\), \(\cdots\), \(C_N\), \(x\) (\(1 \le C_i, x \le N\))가 공백으로 구분되어 주어진다. 이는 처음 각 정점에 \(C_1\), \(C_2\), \(\cdots\), \(C_N\)의 색이 칠해져 있고, \(x\)번 정점에서 시작할 때 색칠하는 과정을 끝내기는 데 걸리는 시간의 기댓값을 구해야 한다는 의미이다.

출력

\(Q\)개의 줄에 걸쳐, 각 초기 상태에 대한 기댓값을 주어진 순서대로 출력한다. 이 때 기댓값을 기약분수로 나타냈을 때 \(\frac{a}{b}\)라고 하면, \(a = bx \pmod{1\,000\,000\,007}\)을 만족하는 \(0\)이상 \(1\,000\,000\,006\)이하의 \(x\)를 출력해야 한다. 이러한 \(x\)가 존재하는 것이 보장된 입력만 주어지고, \(x\)가 유일하다는 것은 증명되어 있다.

예제 입력

Example 1
2
500000 500000
0 3
6 0
2
1 2 1
1 2 2

Example 2
4
1 999999
0 1 2 3
4 0 5 6
7 8 0 9
10 11 12 0
8
1 2 3 4 1
2 2 4 4 2
2 4 2 4 3
1 3 3 3 4
2 1 1 4 1
2 1 3 2 2
1 1 1 1 3
4 3 2 1 4}

Example 3
10
12345 67890
0 1 2 3 4 5 6 7 8 9
2 0 8 6 4 2 4 6 8 2
3 3 0 3 3 3 3 3 3 3
9 9 7 0 5 5 3 3 1 1
4 5 4 5 0 9 9 9 9 9
7 8 7 8 7 0 8 7 8 7
1 2 1 2 1 2 0 2 1 2
8 8 8 6 6 6 6 0 5 5
2 3 4 2 3 4 2 3 0 4
9 8 7 6 5 4 3 2 1 0
10
10 1 2 3 4 5 6 7 8 9 1
2 10 8 6 4 2 4 6 8 2 2
3 3 10 3 3 3 3 3 3 3 3
9 9 7 10 5 5 3 3 1 1 4
4 5 4 5 10 9 9 9 9 9 5
7 8 7 8 7 10 8 7 8 7 6
1 2 1 2 1 2 10 2 1 2 7
8 8 8 6 6 6 6 10 5 5 8
2 3 4 2 3 4 2 3 10 4 9
9 8 7 6 5 4 3 2 1 10 10

예제 출력

Example 1
8
10

Example 2
927109659
403093474
333557301
397999267
133598154
72237072
0
167611085

Example 3
237022287
143958236
496080996
656087792
138754989
710634903
257351692
992622856
107435663
237022287

노트

예제 입출력에서 Example로 시작하는 줄은 실제 입출력에 포함되지 않습니다. 각각을 하나의 입출력 세트로 읽어주세요.

0개의 댓글이 있습니다.