AcWing 861. 二分图的最大匹配python3
原题链接
简单
作者:
xanxus1111
,
2020-05-31 22:58:07
,
所有人可见
,
阅读 682
#匈牙利算法
def add(a,b):
global idx
e[idx] = b
ne[idx] = h[a]
h[a] = idx
idx += 1
def find(x):
i = h[x]
while i != -1: #遍历所有与x匹配的点
j = e[i]
if not st[j]:
st[j] = True
if match[j] == 0 or find(match[j]): #是否没有匹配或者能否找到另一个匹配
match[j] = x
return True
i = ne[i]
return False
if __name__ == '__main__':
N = 510
M = 100010
n1,n2,m = map(int,input().split())
h,e,ne,idx = [-1]*N, [0]*M, [0]*M,0
match = [0]*N
for i in range(m):
a,b = map(int,input().split())
add(a,b)
res = 0
for i in range(n1):
st = [False] * N #不能写在外面,会出错 每次遍历时初始化st数组为False;!!!st[j]存的是右半部分的节点j是否被访问过
if find(i+1): res+=1
print(res)