結果
問題 | No.95 Alice and Graph |
ユーザー |
![]() |
提出日時 | 2020-05-14 18:15:19 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 4,117 ms / 5,000 ms |
コード長 | 1,634 bytes |
コンパイル時間 | 413 ms |
コンパイル使用メモリ | 81,920 KB |
実行使用メモリ | 90,112 KB |
最終ジャッジ日時 | 2024-09-15 12:45:13 |
合計ジャッジ時間 | 13,501 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 14 |
ソースコード
import sysfrom collections import dequeread = sys.stdin.buffer.readreadline = sys.stdin.buffer.readlinereadlines = sys.stdin.buffer.readlinesN, M, K = map(int, readline().split())m = map(int, read().split())if K == 0:print(0)exit()G = [[] for _ in range(N)]for u, v in zip(m, m):u -= 1v -= 1G[u].append(v)G[v].append(u)def bfs(v):dist = [1000] * Nq = deque([v])dist[v] = 0while q:v = q.popleft()for w in G[v]:if dist[w] != 1000:continuedist[w] = dist[v] + 1q.append(w)return distdist_mat = [bfs(v) for v in range(N)]def extract_subgraph(A):assert A[0] == 0mat = []for i in A:mat.append([dist_mat[i][j] for j in A])return matdp = [[K + 1] * (K + 1) for _ in range(1 << (K + 1))]def min_hamilton_path(A):mat = extract_subgraph(A)n = len(A)INF = K + 1global dpdp[1][0] = 0for s in range(3, 1 << n, 2):for i in range(n):dp[s][i] = INFif not (s & (1 << i)):continuet = s ^ (1 << i)x = INFfor j in range(n):if not (t & (1 << j)):continuey = dp[t][j] + mat[i][j]if x > y:x = ydp[s][i] = xfull = (1 << n) - 1return min(dp[full])A = [0]for n in range(N - 1, 0, -1):A.append(n)if min_hamilton_path(A) > K:A.pop()if len(A) >= K + 1:breakanswer = sum((1 << x) - 1 for x in A)print(answer)