又是最小点覆盖数=最大匹配数
用机器A,B的模式来做二分图的两个集合,这样每一条边就代表了一个工作,显然的求最小点覆盖数(一开始没想到,唉~)
program poj1325;
type
node=record
x,y,next:integer;
end;
var
first,link:array[1..100] of integer;
used:array[1..100] of boolean;
g:array[1..1000] of node;
n,m,k,i,len,ans:integer;
procedure init;
var
p,q,w:integer;
begin
len:=0;
for i:=1 to k do
begin
readln(w,p,q);
if (p<>0) and (q<>0) then
begin
inc(len);
g[len].x:=p;
g[len].y:=q;
g[len].next:=first[p];
first[p]:=len;
end;
end;
end;
function find(s:integer):boolean;
var
temp:integer;
begin
find:=true;
temp:=first[s];
while temp<>-1 do
begin
if not used[g[temp].y] then
begin
used[g[temp].y]:=true;
if (link[g[temp].y]=0) or (find(link[g[temp].y])) then
begin
link[g[temp].y]:=s;
exit;
end;
end;
temp:=g[temp].next;
end;
find:=false;
end;
begin
read(n);
while (n<>0) do
begin
readln(m,k);
fillchar(g,sizeof(g),0);
fillchar(link,sizeof(link),0);
for i:=1 to n-1 do
first[i]:=-1;
init;
for i:=1 to n-1 do
begin
fillchar(used,sizeof(used),false);
find(i);
end;
ans:=0;
for i:=1 to m-1 do
if link[i]<>0 then inc(ans);
writeln(ans);
read(n);
end;
end.