結果
問題 |
No.3024 全単射的
|
ユーザー |
![]() |
提出日時 | 2025-02-14 22:54:04 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,768 bytes |
コンパイル時間 | 311 ms |
コンパイル使用メモリ | 82,104 KB |
実行使用メモリ | 107,316 KB |
最終ジャッジ日時 | 2025-02-14 22:54:10 |
合計ジャッジ時間 | 5,004 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 18 RE * 4 |
ソースコード
from collections import deque INF = 10**18 class HopcroftKarp: def __init__(self, N1, N2): self.N1 = N1 self.N2 = N2 self.G = [[] for _ in range(self.N1+1)] self.pair1 = [0]*(self.N1+1) self.pair2 = [0]*(self.N2+1) def add_edge(self, fr, to): self.G[fr].append(to) def bfs(self): que = deque() for i in range(1, self.N1+1): if self.pair1[i] == 0: self.dist[i] = 0 que.append(i) else: self.dist[i] = INF self.dist[0] = INF while que: n = que.popleft() if self.dist[n] < self.dist[0]: for v in self.G[n]: if self.dist[self.pair2[v]] == INF: self.dist[self.pair2[v]] = self.dist[n]+1 que.append(self.pair2[v]) return self.dist[0] != INF def dfs(self, n): if n != 0: for v in self.G[n]: if self.dist[self.pair2[v]] == self.dist[n]+1: if self.dfs(self.pair2[v]): self.pair2[v] = n self.pair1[n] = v return True self.dist[n] = INF return False return True def flow(self): self.dist = [0]*(self.N1+1) ans = 0 while self.bfs(): for i in range(1, self.N1+1): if self.pair1[i] == 0 and self.dfs(i): ans += 1 return ans N, M = map(int, input().split()) XY = [list(map(int, input().split())) for _ in range(N)] H = HopcroftKarp(N, M) for i, (X, Y) in enumerate(XY): H.add_edge(i+1, X) H.add_edge(i+1, Y) print(H.flow())