結果

問題 No.1995 CHIKA Road
ユーザー tktk_snsn
提出日時 2022-07-02 00:59:40
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 728 ms / 2,000 ms
コード長 899 bytes
コンパイル時間 359 ms
コンパイル使用メモリ 82,048 KB
実行使用メモリ 168,832 KB
最終ジャッジ日時 2024-11-26 09:21:40
合計ジャッジ時間 13,144 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 37
権限があれば一括ダウンロードができます

ソースコード

diff #

import heapq
import sys
input = sys.stdin.buffer.readline
sys.setrecursionlimit(10 ** 7)
inf = 10 ** 18

N, M = map(int, input().split())
AB = list(list(map(int, input().split())) for _ in range(M))

exist = {1, N}
for a, b in AB:
    exist.add(a)
    exist.add(b)

exist = sorted(exist)
etoi = {e: i for i, e in enumerate(exist)}
size = len(exist)

G = [[] for _ in range(size)]
for i in range(size - 1):
    d = (exist[i+1] - exist[i]) * 2
    G[i].append((i + 1, d))
    G[i + 1].append((i, d))
for a, b in AB:
    d = b + b - a - a - 1
    a = etoi[a]
    b = etoi[b]
    G[a].append((b, d))
    G[b].append((a, d))


dist = [inf] * size
dist[0] = 0
que = [(0, 0)]
while que:
    ds, s = heapq.heappop(que)
    if dist[s] < ds:
        continue
    for t, dt in G[s]:
        if dist[t] > ds + dt:
            dist[t] = ds + dt
            heapq.heappush(que, (ds + dt, t))

print(dist[size-1])
0