匈牙利算法(codevs2776)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了匈牙利算法(codevs2776)相关的知识,希望对你有一定的参考价值。
type node=^link; link=record des:longint; next:node; end; var n,m,i,t,num:longint; p:node; nd:array[1..200] of node; mat:array[1..200] of longint; vis:array[1..200] of boolean; sel:array[1..200] of longint; function find(po:longint):boolean; var p:node; begin p:=nd[po]; while p<>nil do begin if vis[p^.des]=false then begin vis[p^.des]:=true; if sel[p^.des]=0 then begin sel[p^.des]:=po; mat[po]:=p^.des; exit(true); end else if find(sel[p^.des])=true then begin sel[p^.des]:=po; mat[po]:=p^.des; exit(true); end; end; p:=p^.next; end; exit(false); end; begin read(n,m); for i:=1 to n do begin read(t); while t<>0 do begin new(p);p^.next:=nd[t];p^.des:=i;nd[t]:=p; read(t); end; end; for i:=1 to m do if mat[i]=0 then begin fillchar(vis,sizeof(vis),0); if find(i) then inc(num); end; writeln(num); end.
另外,
最小点覆盖数=最大匹配数
最大独立集=顶点数-最大匹配数
最小路径覆盖数 = 顶点数 - 最大匹配数
以上是关于匈牙利算法(codevs2776)的主要内容,如果未能解决你的问题,请参考以下文章
矩阵游戏|ZJOI2007|BZOJ1059|codevs1433|luoguP1129|二分图匹配|匈牙利算法|Elena