結果
問題 |
No.1326 ふたりのDominator
|
ユーザー |
![]() |
提出日時 | 2025-06-12 21:38:06 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,250 bytes |
コンパイル時間 | 169 ms |
コンパイル使用メモリ | 81,996 KB |
実行使用メモリ | 96,400 KB |
最終ジャッジ日時 | 2025-06-12 21:41:49 |
合計ジャッジ時間 | 5,168 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 6 TLE * 1 -- * 17 |
ソースコード
import sys sys.setrecursionlimit(1 << 25) def main(): import sys input = sys.stdin.read data = input().split() idx = 0 N = int(data[idx]); idx +=1 M = int(data[idx]); idx +=1 edges = [[] for _ in range(N+1)] for _ in range(M): u = int(data[idx]); idx +=1 v = int(data[idx]); idx +=1 edges[u].append(v) edges[v].append(u) Q = int(data[idx]); idx +=1 queries = [] for _ in range(Q): x = int(data[idx]); idx +=1 y = int(data[idx]); idx +=1 queries.append( (x, y) ) parent = [0]*(N+1) disc = [0]*(N+1) low = [0]*(N+1) time_counter = [1] is_cut = [False]*(N+1) def dfs(u, visited, parent_node): visited.add(u) disc[u] = low[u] = time_counter[0] time_counter[0] +=1 child = 0 for v in edges[u]: if v == parent_node: continue if v not in visited: parent[v] = u dfs(v, visited, u) low[u] = min( low[u], low[v] ) if parent_node != -1 and low[v] >= disc[u]: is_cut[u] = True child +=1 else: low[u] = min( low[u], disc[v] ) if parent_node == -1 and child >=2: is_cut[u] = True visited = set() for i in range(1, N+1): if i not in visited: dfs(i, visited, -1) for (x, y) in queries: if x == y: print(0) continue count = 0 for v in range(1, N+1): if v == x or v == y: continue if not is_cut[v]: continue visited_x = set() stack = [x] visited_x.add(x) while stack: u = stack.pop() for nei in edges[u]: if nei == v: continue if nei not in visited_x: visited_x.add(nei) stack.append(nei) if y not in visited_x: count +=1 print(count) if __name__ == "__main__": main()