結果
| 問題 |
No.3263 違法な散歩道
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-09-06 14:13:24 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 406 ms / 2,000 ms |
| コード長 | 1,037 bytes |
| コンパイル時間 | 318 ms |
| コンパイル使用メモリ | 82,444 KB |
| 実行使用メモリ | 119,780 KB |
| 最終ジャッジ日時 | 2025-09-06 14:13:37 |
| 合計ジャッジ時間 | 8,159 ms |
|
ジャッジサーバーID (参考情報) |
judge / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 28 |
ソースコード
N, M = (int(x) for x in input().split())
d={}
for i in range(1, N+1):
d[i] = []
for i in range(M):
U, V = (int(x) for x in input().split())
d[U].append(V)
d[V].append(U)
K=int(input())
if K >= 1:
A=list(map(int, input().split()))
A=set(A)
else:
A = set()
visited=[[-1]*N for _ in range(5)]
visited[0][0] = 0
stack = [[1, 0]]
next_move = []
while stack:
for i, j in stack:
for k in d[i]:
if k not in A:
if visited[0][k-1] == -1:
visited[0][k-1] = visited[j][i-1] + 1
next_move.append([k, 0])
else:
if j == 4:
continue
elif visited[j+1][k-1] == -1:
visited[j+1][k-1] = visited[j][i-1] + 1
next_move.append([k, j+1])
stack, next_move = next_move, []
INF=float("inf")
ans = INF
for i in range(5):
if visited[i][-1] != -1:
ans = min(ans, visited[i][-1])
if ans != INF:
print(ans)
else:
print(-1)