結果

問題 No.1473 おでぶなおばけさん
ユーザー hitonanode
提出日時 2021-04-04 18:36:12
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 1,404 ms / 2,000 ms
コード長 1,047 bytes
コンパイル時間 491 ms
コンパイル使用メモリ 12,672 KB
実行使用メモリ 50,080 KB
最終ジャッジ日時 2024-12-28 01:38:38
合計ジャッジ時間 31,478 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 47
権限があれば一括ダウンロードができます

ソースコード

diff #

# Python 二分探索解 AC になってほしい
from collections import deque
import sys
input = sys.stdin.readline

def main():
    N, M = map(int, input().split())
    to = [[] for _ in range(N)]
    ds = []
    for _ in range(M):
        s, t, d = map(int, input().split())
        s -= 1
        t -= 1
        to[s].append((t, d))
        to[t].append((s, d))
        ds.append(d)
    
    ds = sorted(set(ds))
    ok, ng = 0, len(ds)

    def calc(th: int):
        dist = [1 << 30] * N
        dist[0] = 0
        q = deque([0])
        while q:
            now = q.popleft()
            for nxt, d in to[now]:
                if d >= th and dist[nxt] > dist[now] + 1:
                    dist[nxt] = dist[now] + 1
                    q.append(nxt)
        return dist[-1]

    while ng - ok > 1:
        c = (ok + ng) // 2
        x = calc(ds[c])
        if x < 1 << 30:
            ok = c
        else:
            ng = c
    print(ds[ok], calc(ds[ok]))

if __name__ == '__main__':
    main()
0