提出 #39793562
ソースコード 拡げる
mod = 998244353
inv = [pow(i, mod - 2, mod) for i in range(50)]
def fast_pow(f, k, deg):
assert f[0] == 1
d = len(f) - 1
g = [0] * deg
g[0] = 1
for a in range(1, deg):
co = (k + 1 - a) % mod
for i in range(1, min(a, d) + 1):
g[a] += f[i] * g[a - i] % mod * co
g[a] %= mod
co = (co + k + 1) % mod
g[a] *= inv[a]
g[a] %= mod
return g
def subset_pow(f, K):
N = len(f).bit_length() - 1
M = 1 << N
assert len(f) == M
pc = [0] * M
for i in range(M):
pc[i] = pc[i // 2] + i % 2
F = [0] * ((N + 1) * M)
for i in range(M):
F[i * (N + 1) + pc[i]] = f[i]
for lg in range(N):
i = 1 << lg
for j in range(0, M, 2 * i):
for k in range(i):
x = (j + k) * (N + 1)
y = (i + j + k) * (N + 1)
for l in range(N + 1):
F[y + l] += F[x + l]
F[y + l] %= mod
K %= mod
for i in range(M):
a = F[i * (N + 1):(i + 1) * (N + 1)]
b = fast_pow(a, K, N + 1)
for j in range(N + 1):
F[i * (N + 1) + j] = b[j]
for lg in range(N):
i = 1 << lg
for j in range(0, M, 2 * i):
for k in range(i):
x = (j + k) * (N + 1)
y = (i + j + k) * (N + 1)
for l in range(N + 1):
F[y + l] -= F[x + l]
F[y + l] %= mod
g = [0] * M
for i in range(M):
g[i] = F[i * (N + 1) + pc[i]]
return g
def solve_sp(N, K, es):
adj = [[0 for j in range(N)]for i in range(N)]
for u, v in es:
adj[u][v] = adj[v][u] = 1
f = [0] * (1 << N)
for i in range(1 << N):
ok = 1
for j in range(N):
for k in range(j):
if (i >> j) % 2 and (i >> k) % 2 and adj[j][k]:
ok = 0
f[i] = ok
g = subset_pow(f, K)
return g[-1]
import copy
def solve(N, K, _es):
es = copy.deepcopy(_es)
for uv in es:
assert 0 <= uv[0] and uv[0] < N
assert 0 <= uv[1] and uv[1] < N
if uv[0] == uv[1]:
return 0
if N == 0:
return 1
def ch(u, v):
for i in range(len(es)):
if es[i][0] == u or es[i][0] == v:
es[i][0] = u + v - es[i][0]
if es[i][1] == u or es[i][1] == v:
es[i][1] = u + v - es[i][1]
deg = [0 for _ in range(N)]
for uv in es:
deg[uv[0]] += 1
deg[uv[1]] += 1
mindeg = min(deg)
ch(deg.index(mindeg), N - 1)
if mindeg == 0:
return solve(N - 1, K, es) * K % mod
if mindeg == 1:
for j in range(len(es)):
if max(es[j]) == N - 1:
es.pop(j)
break
return solve(N - 1, K, es) * (K - 1) % mod
if mindeg == 2:
adj = []
for _ in range(2):
for j in range(len(es)):
if max(es[j]) == N - 1:
adj.append(es[j][0] + es[j][1] - (N - 1))
es.pop(j)
break
assert len(adj) == 2
if adj[0] == adj[1]:
return solve(N - 1, K, es) * (K - 1) % mod
adj.sort()
ch(adj[1], N - 2)
ch(adj[0], N - 3)
ans = solve(N - 1, K, es) * (K - 2) % mod
for j in range(len(es)):
if es[j][0] == N - 2:
es[j][0] = N - 3
if es[j][1] == N - 2:
es[j][1] = N - 3
return (solve(N - 2, K, es) + ans) % mod
return solve_sp(N, K, es)
def main():
N, M, K = map(int, input().split())
es = []
for _ in range(M):
u, v = map(int, input().split())
es.append([u - 1, v - 1])
print(solve(N, K, es))
main()
提出情報
| 提出日時 | |
|---|---|
| 問題 | Ex - K-Coloring |
| ユーザ | Nyaan |
| 言語 | PyPy3 (7.3.0) |
| 得点 | 600 |
| コード長 | 3424 Byte |
| 結果 | AC |
| 実行時間 | 5831 ms |
| メモリ | 271888 KiB |
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 600 / 600 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt |
| All | 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, 01_random_00.txt, 01_random_01.txt, 01_random_02.txt, 02_n_max_00.txt, 02_n_max_01.txt, 02_n_max_02.txt, 03_m_max_00.txt, 03_m_max_01.txt, 03_m_max_02.txt, 03_m_max_03.txt, 04_tree_00.txt, 04_tree_01.txt, 05_path_00.txt, 05_path_01.txt, 06_cycle_00.txt, 06_cycle_01.txt, 07_broken_cycle_00.txt, 07_broken_cycle_01.txt, 07_broken_cycle_02.txt, 07_broken_cycle_03.txt, 07_broken_cycle_04.txt, 07_broken_cycle_05.txt, 07_broken_cycle_06.txt, 07_broken_cycle_07.txt, 07_broken_cycle_08.txt, 07_broken_cycle_09.txt, 07_broken_cycle_10.txt, 07_broken_cycle_11.txt, 08_star_00.txt, 08_star_01.txt, 09_double_star_00.txt, 09_double_star_01.txt, 10_deg_2_00.txt, 10_deg_2_01.txt, 11_deg_3_00.txt, 11_deg_3_01.txt, 11_deg_3_02.txt, 11_deg_3_03.txt, 12_deg_4_00.txt, 12_deg_4_01.txt, 13_deg_5_00.txt, 13_deg_5_01.txt, 14_deg_6_00.txt, 14_deg_6_01.txt, 15_deg_2_to_3_00.txt, 15_deg_2_to_3_01.txt, 15_deg_2_to_3_02.txt, 15_deg_2_to_3_03.txt, 16_deg_3_to_4_00.txt, 16_deg_3_to_4_01.txt, 16_deg_3_to_4_02.txt, 16_deg_3_to_4_03.txt, 16_deg_3_to_4_04.txt, 16_deg_3_to_4_05.txt, 17_perfect_00.txt, 17_perfect_01.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| 00_sample_00.txt | AC | 90 ms | 69348 KiB |
| 00_sample_01.txt | AC | 63 ms | 69320 KiB |
| 00_sample_02.txt | AC | 64 ms | 70184 KiB |
| 00_sample_03.txt | AC | 65 ms | 69492 KiB |
| 00_sample_04.txt | AC | 67 ms | 70556 KiB |
| 01_random_00.txt | AC | 65 ms | 69768 KiB |
| 01_random_01.txt | AC | 72 ms | 74212 KiB |
| 01_random_02.txt | AC | 97 ms | 75196 KiB |
| 02_n_max_00.txt | AC | 68 ms | 73628 KiB |
| 02_n_max_01.txt | AC | 68 ms | 69812 KiB |
| 02_n_max_02.txt | AC | 69 ms | 73604 KiB |
| 03_m_max_00.txt | AC | 132 ms | 76268 KiB |
| 03_m_max_01.txt | AC | 148 ms | 77456 KiB |
| 03_m_max_02.txt | AC | 203 ms | 79820 KiB |
| 03_m_max_03.txt | AC | 167 ms | 78272 KiB |
| 04_tree_00.txt | AC | 72 ms | 73840 KiB |
| 04_tree_01.txt | AC | 71 ms | 73656 KiB |
| 05_path_00.txt | AC | 70 ms | 73784 KiB |
| 05_path_01.txt | AC | 71 ms | 73600 KiB |
| 06_cycle_00.txt | AC | 105 ms | 75208 KiB |
| 06_cycle_01.txt | AC | 100 ms | 75236 KiB |
| 07_broken_cycle_00.txt | AC | 120 ms | 76028 KiB |
| 07_broken_cycle_01.txt | AC | 125 ms | 76112 KiB |
| 07_broken_cycle_02.txt | AC | 116 ms | 75692 KiB |
| 07_broken_cycle_03.txt | AC | 213 ms | 79324 KiB |
| 07_broken_cycle_04.txt | AC | 97 ms | 74904 KiB |
| 07_broken_cycle_05.txt | AC | 79 ms | 74432 KiB |
| 07_broken_cycle_06.txt | AC | 90 ms | 75128 KiB |
| 07_broken_cycle_07.txt | AC | 84 ms | 74352 KiB |
| 07_broken_cycle_08.txt | AC | 102 ms | 74912 KiB |
| 07_broken_cycle_09.txt | AC | 105 ms | 75108 KiB |
| 07_broken_cycle_10.txt | AC | 104 ms | 75188 KiB |
| 07_broken_cycle_11.txt | AC | 103 ms | 75388 KiB |
| 08_star_00.txt | AC | 70 ms | 73700 KiB |
| 08_star_01.txt | AC | 74 ms | 73668 KiB |
| 09_double_star_00.txt | AC | 72 ms | 73704 KiB |
| 09_double_star_01.txt | AC | 70 ms | 73724 KiB |
| 10_deg_2_00.txt | AC | 107 ms | 75276 KiB |
| 10_deg_2_01.txt | AC | 119 ms | 75908 KiB |
| 11_deg_3_00.txt | AC | 5817 ms | 271864 KiB |
| 11_deg_3_01.txt | AC | 5812 ms | 271816 KiB |
| 11_deg_3_02.txt | AC | 5831 ms | 271744 KiB |
| 11_deg_3_03.txt | AC | 5817 ms | 271888 KiB |
| 12_deg_4_00.txt | AC | 287 ms | 80132 KiB |
| 12_deg_4_01.txt | AC | 275 ms | 80132 KiB |
| 13_deg_5_00.txt | AC | 115 ms | 75500 KiB |
| 13_deg_5_01.txt | AC | 115 ms | 75444 KiB |
| 14_deg_6_00.txt | AC | 100 ms | 75568 KiB |
| 14_deg_6_01.txt | AC | 99 ms | 75468 KiB |
| 15_deg_2_to_3_00.txt | AC | 151 ms | 77412 KiB |
| 15_deg_2_to_3_01.txt | AC | 233 ms | 81232 KiB |
| 15_deg_2_to_3_02.txt | AC | 1870 ms | 141940 KiB |
| 15_deg_2_to_3_03.txt | AC | 1883 ms | 141632 KiB |
| 16_deg_3_to_4_00.txt | AC | 677 ms | 97456 KiB |
| 16_deg_3_to_4_01.txt | AC | 349 ms | 85556 KiB |
| 16_deg_3_to_4_02.txt | AC | 665 ms | 97392 KiB |
| 16_deg_3_to_4_03.txt | AC | 668 ms | 97512 KiB |
| 16_deg_3_to_4_04.txt | AC | 137 ms | 75696 KiB |
| 16_deg_3_to_4_05.txt | AC | 137 ms | 76056 KiB |
| 17_perfect_00.txt | AC | 91 ms | 74296 KiB |
| 17_perfect_01.txt | AC | 103 ms | 74976 KiB |