結果
問題 | No.1254 補強への架け橋 |
ユーザー | shotoyoo |
提出日時 | 2020-10-09 22:42:11 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 595 ms / 2,000 ms |
コード長 | 1,177 bytes |
コンパイル時間 | 161 ms |
コンパイル使用メモリ | 81,792 KB |
実行使用メモリ | 202,668 KB |
最終ジャッジ日時 | 2024-07-20 13:08:00 |
合計ジャッジ時間 | 25,156 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 123 |
ソースコード
import sys input = lambda : sys.stdin.readline().rstrip() sys.setrecursionlimit(max(1000, 10**9)) write = lambda x: sys.stdout.write(x+"\n") n = int(input()) ns = [[] for _ in range(n)] d = {} for ind in range(n): i,j = map(lambda x: int(x)-1, input().split()) ns[i].append(j) ns[j].append(i) d[min(i,j), max(i,j)] = ind + 1 def dfs(i, k, par): used[i] = True ord[i] = k k += 1 low[i] = ord[i] is_aps = False count = 0 for v in ns[i]: if not used[v]: count += 1 k = dfs(v, k, i) low[i] = min(low[i], low[v]) if par != -1 and ord[i] <= low[v]: is_aps = True if ord[i] < low[v]: bs.append((min(i, v), max(i, v))) elif v!=par: low[i] = min(low[i], ord[v]) if par==-1 and count>=2: is_aps = True if is_aps: aps.append(i) return k used = [False] * n ord = [False] * n low = [False] * n k = 0 aps = [] bs = [] for i in range(n): if not used[i]: k = dfs(i, k, -1) ans = set(d.values()) for i,j in bs: ans.discard(d[(i,j)]) print(len(ans)) write(" ".join(map(str, ans)))