結果
問題 |
No.1833 Subway Planning
|
ユーザー |
![]() |
提出日時 | 2025-06-12 20:55:46 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,724 bytes |
コンパイル時間 | 273 ms |
コンパイル使用メモリ | 82,524 KB |
実行使用メモリ | 495,564 KB |
最終ジャッジ日時 | 2025-06-12 20:59:27 |
合計ジャッジ時間 | 9,556 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | -- * 3 |
other | AC * 3 WA * 2 TLE * 1 -- * 17 |
ソースコード
import sys from collections import deque, defaultdict def main(): sys.setrecursionlimit(1 << 25) N = int(sys.stdin.readline()) edges = [] edges_dict = {} for _ in range(N-1): u, v, c = map(int, sys.stdin.readline().split()) edges.append((u, v, c)) edges_dict[(u, v)] = c edges_dict[(v, u)] = c max_initial = max(c for u, v, c in edges) low = 0 high = max_initial def is_feasible(X): E = [] nodes = set() for u, v, c in edges: if c > X: E.append((u, v, c)) nodes.add(u) nodes.add(v) if not E: return True adj = defaultdict(list) for u, v, c in E: adj[u].append(v) adj[v].append(u) visited = set() start = next(iter(nodes)) if nodes else None if start is None: return True q = deque([start]) visited.add(start) while q: u = q.popleft() for v in adj[u]: if v not in visited: visited.add(v) q.append(v) if len(visited) != len(nodes): return False degree = defaultdict(int) for u in adj: degree[u] = len(adj[u]) deg1 = 0 deg2 = 0 for u in nodes: d = degree[u] if d > 2: return False if d == 1: deg1 += 1 elif d == 2: deg2 += 1 if deg1 != 2: return False ends = [u for u in nodes if degree[u] == 1] if len(ends) != 2: return False u, v = ends parent = {} c_list = [] visited_bfs = set([u]) q = deque([u]) parent[u] = None while q: current = q.popleft() for neighbor in adj[current]: if neighbor not in visited_bfs: visited_bfs.add(neighbor) parent[neighbor] = current c = edges_dict[(current, neighbor)] c_list.append(c) q.append(neighbor) if not c_list: max_c = E[0][2] min_c = E[0][2] else: max_c = max(c_list) min_c = min(c_list) if (max_c - min_c) <= X: return True else: return False answer = max_initial while low <= high: mid = (low + high) // 2 if is_feasible(mid): answer = mid high = mid - 1 else: low = mid + 1 print(answer) if __name__ == "__main__": main()