結果
| 問題 |
No.2674 k-Walk on Bipartite
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2024-03-14 14:59:51 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 365 ms / 2,000 ms |
| コード長 | 1,868 bytes |
| コンパイル時間 | 241 ms |
| コンパイル使用メモリ | 82,304 KB |
| 実行使用メモリ | 99,584 KB |
| 最終ジャッジ日時 | 2024-09-29 23:42:58 |
| 合計ジャッジ時間 | 6,469 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 36 |
ソースコード
#!/usr/bin/pypy3
from collections import deque
Yes = "Yes"
Unknown = "Unknown"
No = "No"
def main():
# 入力受取
N, M = map(int, input().split())
s, t, k = map(int, input().split())
s -= 1
t -= 1
adj = [[] for _ in range(N)]
for i in range(M):
u, v = map(int, input().split())
u -= 1
v -= 1
adj[u].append((v))
adj[v].append((u))
# BFS
que = deque()
dist = [0] * N
visited = [False] * N
que.append(s)
dist[s] = 0
visited[s] = True
while len(que) != 0:
v = que.popleft()
for u in adj[v]:
if not visited[u]:
que.append(u)
dist[u] = dist[v] + 1
visited[u] = True
# グラフ(V, F)に長さkの歩道が存在する
if visited[t] and dist[t] <= k and dist[t] % 2 == k % 2 and len(adj[s]) != 0:
print(Yes)
return
# グラフ(V, F)に長さkの歩道が存在しない
# sとtが連結
if visited[t]:
# 最短経路長がkの偶奇と一致しない
if dist[t] % 2 != k % 2:
print("No")
return
# 最短経路長がkの偶奇と一致する
# s == tのとき、N = 1かで判定
if s == t:
print(Unknown if N != 1 else No)
return
# s != tのとき、最短経路長を 1 または 2 にできる
min_dist = (1 if k % 2 else 2)
print(Unknown if min_dist <= k else No)
return
# sとtが非連結
# N = 2 かつ k%2 == 0 のとき別処理
if N == 2 and k % 2 == 0:
print(No)
return
# それ以外のとき、最短経路長を 1 または 2 の好きな方にできる
min_dist = (1 if k % 2 else 2)
print(Unknown if min_dist <= k else No)
return
if __name__ == "__main__":
main()