結果
問題 | No.95 Alice and Graph |
ユーザー |
![]() |
提出日時 | 2015-10-01 01:32:51 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 2,402 ms / 5,000 ms |
コード長 | 1,478 bytes |
コンパイル時間 | 257 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 95,744 KB |
最終ジャッジ日時 | 2024-07-19 18:47:19 |
合計ジャッジ時間 | 12,091 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 14 |
ソースコード
# めぐるちゃんのを参考にしましたdef solve():N, M, K = map(int, input().split())dist = [[float('inf')] * N for _ in range(N)]for i in range(N):dist[i][i] = 0for i in range(M):u, v = map(int, input().split())u -= 1v -= 1dist[u][v] = dist[v][u] = 1for k in range(N):for i in range(N):for j in range(N):dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])inf = float('inf')dp = [[inf] * (K + 1) for _ in range(1 << (K + 1))]def check(v):l = len(v)for i in range(1 << l):for j in range(l):dp[i][j] = inffor i in range(l):dp[1 << i][i] = dist[0][v[i]]for i in range(1, 1 << l):dpi = dp[i]for j in range(l):if dpi[j] == inf:continuefor k in range(l):k1 = 1 << kif i & k1:continueni = i | k1dp[ni][k] = min(dp[ni][k], dpi[j] + dist[v[j]][v[k]])return any(a <= K for a in dp[(1 << l) - 1][:K])ans = 0v = []for n in range(N - 1, 0, -1):if len(v) == K:breakv.append(n)if check(v):ans += 2 ** n - 1else:v.pop()print(ans)if __name__ == '__main__':solve()