結果
| 問題 |
No.2565 はじめてのおつかい
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-12-15 16:04:10 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 600 ms / 2,000 ms |
| コード長 | 1,426 bytes |
| コンパイル時間 | 166 ms |
| コンパイル使用メモリ | 12,928 KB |
| 実行使用メモリ | 49,664 KB |
| 最終ジャッジ日時 | 2024-09-27 06:28:34 |
| 合計ジャッジ時間 | 16,986 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 50 |
ソースコード
from collections import deque
from math import inf, isinf
from typing import Iterable
import sys
def printe(*args, end="\n"):
print(*args, end=end, file=sys.stderr)
def distance_bfs(graph: list[Iterable[int]], dep: int) -> list[int | float]:
distance = [inf for _ in graph]
distance[dep] = 0
queue = deque()
queue.append(dep)
while queue:
current = queue.popleft()
for neighbor in graph[current]:
if distance[neighbor] > distance[current] + 1:
distance[neighbor] = distance[current] + 1
queue.append(neighbor)
return distance
def main():
N, M = map(int, input().split())
graph: list[set[int]] = [set() for _ in range(N)]
for _ in range(M):
dep, dest = map(lambda n: int(n) - 1, input().split())
graph[dep].add(dest)
from_1_distance = distance_bfs(graph, 0)
from_N_distance = distance_bfs(graph, N - 1)
from_N_1_distance = distance_bfs(graph, N - 2)
# 先にN-1を通る場合
distance_cand = from_1_distance[N - 2] + \
from_N_1_distance[N - 1] + from_N_distance[0]
# 先にNを通る場合
distance_cand2 = from_1_distance[N - 1] + \
from_N_distance[N - 2] + from_N_1_distance[0]
min_distance = min(distance_cand, distance_cand2)
if isinf(min_distance):
print(-1)
else:
print(min_distance)
if __name__ == "__main__":
main()