标签:
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.
另外,
最小点覆盖数=最大匹配数
最大独立集=顶点数-最大匹配数
最小路径覆盖数 = 顶点数 - 最大匹配数
标签:
原文地址:http://www.cnblogs.com/zhujiangning/p/5213016.html