又是最小点覆盖数=最大匹配数

用机器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.