結果
| 問題 |
No.3263 違法な散歩道
|
| コンテスト | |
| ユーザー |
Prala
|
| 提出日時 | 2025-09-06 14:06:02 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,526 bytes |
| コンパイル時間 | 262 ms |
| コンパイル使用メモリ | 12,416 KB |
| 実行使用メモリ | 138,016 KB |
| 最終ジャッジ日時 | 2025-09-06 14:06:57 |
| 合計ジャッジ時間 | 40,998 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 RE * 1 |
| other | AC * 22 TLE * 6 |
ソースコード
def IM():
return map(int, input().split())
N, M = IM()
G = [[] for _ in range(5*N)]
nodes = []
for _ in range(M):
u, v = IM()
u -= 1
v -= 1
nodes.append((u, v))
C = input()
if C:
A = set(IM())
else:
A = set()
for i in range(M):
u, v = nodes[i]
if u+1 in A:
for j in range(4):
G[N*j+v].append(N*(j+1)+u)
else:
for j in range(5):
G[N*j+v].append(u)
if v+1 in A:
for j in range(4):
G[N*j+u].append(N*(j+1)+v)
else:
for j in range(5):
G[N*j+u].append(v)
# 各頂点が何手目に探索されたか
# -1 は「まだ探索されていない」ことを表す
dist = [-1] * (5*N)
# k 手目に探索された頂点集合を格納 (最大でも N-1 手まで)
nodes = [[] for i in range(5*N)]
# 頂点 0 を始点とする
dist[0] = 0
nodes[0] = [0]
# k 手目の探索をする
for k in range(1, 5*N):
# k-1 手目に探索された各頂点 v に対して
for v in nodes[k - 1]:
# 頂点 v から 1 手で行ける頂点 next_v を探索
for next_v in G[v]:
# 頂点 next_v が探索済みであれば何もしない
if dist[next_v] != -1:
continue
# 頂点 next_v を探索する
dist[next_v] = dist[v] + 1
nodes[k].append(next_v)
#print(dist)
ans = 10**18
for i in range(5):
if dist[N*i+N-1] != -1:
ans = min(ans, dist[N*i+N-1])
print(ans if ans != 10**18 else -1)
Prala