結果
問題 |
No.2674 k-Walk on Bipartite
|
ユーザー |
![]() |
提出日時 | 2025-04-16 15:54:16 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,948 bytes |
コンパイル時間 | 217 ms |
コンパイル使用メモリ | 82,324 KB |
実行使用メモリ | 125,764 KB |
最終ジャッジ日時 | 2025-04-16 15:56:00 |
合計ジャッジ時間 | 6,704 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 WA * 8 |
ソースコード
import sys from collections import deque def main(): input = sys.stdin.read().split() ptr = 0 N = int(input[ptr]) ptr += 1 M = int(input[ptr]) ptr += 1 s = int(input[ptr])-1 ptr += 1 t = int(input[ptr])-1 ptr += 1 k = int(input[ptr]) ptr += 1 edges = [[] for _ in range(N)] for _ in range(M): a = int(input[ptr])-1 ptr += 1 b = int(input[ptr])-1 ptr += 1 edges[a].append(b) edges[b].append(a) color = [-1] * N is_bipartite = True for i in range(N): if color[i] == -1: queue = deque() queue.append(i) color[i] = 0 while queue: u = queue.popleft() for v in edges[u]: if color[v] == -1: color[v] = color[u] ^ 1 queue.append(v) elif color[v] == color[u]: pass s_color = color[s] t_color = color[t] required_parity = k % 2 actual_parity = (s_color != t_color) if actual_parity: if required_parity != 1: print("No") return else: if required_parity != 0: print("No") return if M == 0: print("No") return INF = float('inf') dist = [[INF] * 2 for _ in range(N)] dist[s][0] = 0 queue = deque() queue.append((s, 0)) while queue: u, parity = queue.popleft() current_dist = dist[u][parity] for v in edges[u]: new_parity = 1 - parity new_dist = current_dist + 1 if new_dist < dist[v][new_parity]: dist[v][new_parity] = new_dist queue.append((v, new_parity)) target_parity = k % 2 if dist[t][target_parity] <= k: print("Yes") else: print("Unknown") if __name__ == "__main__": main()