結果
問題 |
No.1473 おでぶなおばけさん
|
ユーザー |
![]() |
提出日時 | 2021-04-04 16:43:27 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 646 ms / 2,000 ms |
コード長 | 1,502 bytes |
コンパイル時間 | 439 ms |
コンパイル使用メモリ | 12,800 KB |
実行使用メモリ | 42,556 KB |
最終ジャッジ日時 | 2024-12-28 00:29:48 |
合計ジャッジ時間 | 19,281 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 47 |
ソースコード
# Python ACになってほしい from collections import deque import sys input = sys.stdin.readline class DSU: def __init__(self, N: int) -> None: self.par = list(range(N)) self.sz = [1] * N def find(self, x: int) -> int: if self.par[x] != x: self.par[x] = self.find(self.par[x]) return self.par[x] def unite(self, x: int, y: int) -> bool: x, y = self.find(x), self.find(y) if x == y: return False if self.sz[x] < self.sz[y]: x, y = y, x self.par[y] = x self.sz[x] += self.sz[y] return True def same(self, x: int, y: int) -> bool: return self.find(x) == self.find(y) def main(): N, M = map(int, input().split()) uf = DSU(N) edges = [] for _ in range(M): s, t, w = map(int, input().split()) edges.append((w, s - 1, t - 1)) edges.sort(reverse=True) ret = 1 << 30 for w, u, v in edges: if uf.same(0, N - 1): break ret = w uf.unite(u, v) to = [[] for _ in range(N)] for w, s, t in edges: if w >= ret: to[s].append(t), to[t].append(s) dist = [1 << 30] * N dist[0] = 0 q = deque([0]) while q: now = q.popleft() for nxt in to[now]: if dist[nxt] > dist[now] + 1: dist[nxt] = dist[now] + 1 q.append(nxt) print(ret, dist[N - 1]) if __name__ == '__main__': main()