結果
問題 |
No.1170 Never Want to Walk
|
ユーザー |
|
提出日時 | 2025-10-07 21:08:24 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,266 bytes |
コンパイル時間 | 322 ms |
コンパイル使用メモリ | 82,392 KB |
実行使用メモリ | 104,016 KB |
最終ジャッジ日時 | 2025-10-07 21:08:32 |
合計ジャッジ時間 | 7,138 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 17 WA * 20 |
ソースコード
import sys import bisect # 再帰の制限を緩和(Nが大きい場合に対応) sys.setrecursionlimit(10**6) # StationConnectivity クラスは前回と同じで問題ありません class StationConnectivity: def __init__(self, num_station): self.parent = [-1] * num_station self.max_idx = list(range(num_station)) def find(self, i): if self.parent[i] < 0: return i else: self.parent[i] = self.find(self.parent[i]) return self.parent[i] def union(self, i, j): root_i = self.find(i) root_j = self.find(j) if root_i != root_j: if self.parent[root_i] > self.parent[root_j]: root_i, root_j = root_j, root_i self.parent[root_i] += self.parent[root_j] self.parent[root_j] = root_i self.max_idx[root_i] = max(self.max_idx[root_i], self.max_idx[root_j]) def countReachable(self, i): return -self.parent[self.find(i)] def main(): try: # 入力を高速に読み込む input = sys.stdin.readline num_station, A, B = map(int, input().split()) xi = list(map(int, input().split())) except (IOError, ValueError): return railway = StationConnectivity(num_station) for i in range(num_station): start_idx = bisect.bisect_left(xi, xi[i] - B, hi=i) end_idx = bisect.bisect_right(xi, xi[i] - A, hi=i) # === ここからが修正箇所 === k = start_idx while k < end_idx: # kが属するグループの根を見つける root_k = railway.find(k) # unionする前に、次にジャンプすべき位置を確保しておく # (kが属するグループの最大インデックス + 1) next_k = railway.max_idx[root_k] + 1 # 駅iと駅kを連結する railway.union(i, k) # 事前に確保しておいた位置へジャンプする k = next_k # === ここまでが修正箇所 === for i in range(num_station): print(railway.countReachable(i)) if __name__ == "__main__": main()