結果
| 問題 |
No.2733 Just K-times TSP
|
| コンテスト | |
| ユーザー |
norioc
|
| 提出日時 | 2025-10-21 20:52:11 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,316 bytes |
| コンパイル時間 | 409 ms |
| コンパイル使用メモリ | 82,836 KB |
| 実行使用メモリ | 110,452 KB |
| 最終ジャッジ日時 | 2025-10-21 20:52:22 |
| 合計ジャッジ時間 | 9,860 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 20 TLE * 1 -- * 11 |
ソースコード
from collections import defaultdict
MOD = 998244353
N, M, K = map(int, input().split())
adj = defaultdict(list)
for _ in range(M):
u, v = map(lambda x: int(x)-1, input().split())
adj[u].append(v)
adj[v].append(u)
def pack(keys: list[int]) -> int:
# K+1 進数
res = 0
b = 1
for k in keys:
res += k * b
b *= (K+1)
# assert keys == unpack(res), (keys, unpack(res))
return res
def unpack(x: int) -> list[int]:
res = []
s = x
b = K+1
for i in range(N):
res.append(s % b)
s //= b
return res
def tsp(start):
size = pow(K+1, N)
dp = [[0] * N for _ in range(size)]
# dp[各都市の訪問回数][最後に訪れた都市]
keys = [0] * N
keys[start] = 1
dp[pack(keys)][start] = 1
for i in range(size):
cnts = unpack(i)
for j in range(N): # 最後に訪れた都市
if cnts[j] == 0: continue
for to in adj[j]:
if cnts[to] == K: continue
xs = cnts.copy()
xs[to] += 1
nk = pack(xs)
dp[nk][to] += dp[i][j]
dp[nk][to] %= MOD
nk = pack([K] * N)
res = sum(dp[nk][i] for i in range(N)) % MOD
return res
ans = sum(tsp(i) for i in range(N)) % MOD
print(ans)
norioc