結果
問題 |
No.1254 補強への架け橋
|
ユーザー |
|
提出日時 | 2020-10-10 02:50:03 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 431 ms / 2,000 ms |
コード長 | 1,713 bytes |
コンパイル時間 | 187 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 153,304 KB |
最終ジャッジ日時 | 2024-07-20 15:32:04 |
合計ジャッジ時間 | 23,541 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 123 |
ソースコード
import sys,os,io input = sys.stdin.readline from collections import defaultdict class Graph: def __init__(self, N): self.V = N self.edge = [[] for _ in range(self.V)] self.edges = defaultdict(lambda: 0) self.prev = [N]*N self.parent = [N]*N def add_edge(self, a, b, i): self.edge[a].append(b) self.edges[(a,b)] = i def dfs(self, start): stack = [start] self.parent[start] = -1 self.visited[start] = 1 #記録したい値の配列を定義 while stack: v = stack[-1] for u,i in self.edge[v]: if u==self.parent[v]: continue if self.parent[u]==N: #子へ降ろす self.parent[u]=v stack.append(u) break else: return u else: stack.pop() def bfs(self, start): stack = deque([start]) self.parent[start] = -1 while stack: v = stack.pop() for u in self.edge[v]: if u==self.parent[v]: continue if self.parent[u]!=N: return v,u self.parent[u]=v #頂点に対する処理 stack.append(u) return from collections import deque from copy import copy N = int(input()) G = Graph(N) for i in range(N): a,b = map(int, input().split()) a,b = min(a-1,b-1), max(a-1,b-1) G.add_edge(a,b,i+1) G.add_edge(b,a,i+1) v,u = G.bfs(0) lis = [] lis.append(G.edges[v,u]) while G.parent[v]!=-1: lis.append(G.edges[(G.parent[v],v)]) v = G.parent[v] while G.parent[u]!=-1: lis.append(G.edges[(G.parent[u],u)]) u = G.parent[u] lis.sort() ans = set() from collections import Counter c = Counter(lis) for k,val in c.items(): if val==1: ans.add(k) print(len(ans)) print(*ans)