[delphi]
Program P3692;
const
maxn=200;
var
n,m,l,i,j,k,ans,x,y:longint;
b:array[1..400] of boolean;
map:array[1..400,1..400] of boolean;
a:array[1..400] of longint;
function find(x:longint):boolean;
var
i,j:longint;
begin
for i:=1 to m do
if not(b[i]) and (map[x,i]) then
begin
b[i]:=true;
if a[i]=0 then begin a[i]:=x; exit(true); end;
if find(a[i]) then begin a[i]:=x; exit(true); end;
end;
exit(false);
end;
begin
i:=1;
read(n,m,l);
while (n+m+l>0) do
begin
ans:=0;
fillchar(a,sizeof(a),0);
fillchar(map,sizeof(map),true);
for k:=1 to l do
begin
read(x,y);
map[x,y]:=false;
end;
for k:=1 to n do
begin
fillchar(b,sizeof(b),false);
if find(k) then inc(ans);
end;
writeln('Case ',i,': ',n+m-ans);
inc(i);
read(n,m,l);
end;
end.
匈牙利算法:www.2cto.com
b[]保存當前找交錯路P的各點是否已被連通,a[]表示某點之前的點
本題的2分圖是取最大團(各點互相連通),利用2分圖性質,可看成補圖的最大獨立集(各點互不連通)……