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\)번 정점에서 시작하여 그래프 위를 돌아다니며 정점에 칠해진 색을 바꾸려고 하는데, 그 과정은 다음과 같다 :
- 모든 정점이 같은 색으로 칠해져 있다면 과정을 종료한다.
- 만약 경근이가 현재 \(i\)번 정점에 있다면, 다음에 이동할 정점으로 \(i\)번 정점과는 다른 \(j\)를 각각 \(\frac{1}{N - 1}\)의 확률로 선택한다.
- \(i\)번 정점의 색 \(C_i\)를 \(p\)의 확률로 색 \(C_j\)로 칠한다.
- 경근이가 \(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로 시작하는 줄은 실제 입출력에 포함되지 않습니다. 각각을 하나의 입출력 세트로 읽어주세요.
