POJ 3692(匈牙利算法)

来源:互联网 发布:红色复仇软件破解版 编辑:程序博客网 时间:2024/05/01 15:46


匈牙利算法:

b[]保存当前找交错路P的各点是否已被连通,a[]表示某点之前的点

本题的2分图是取最大团(各点互相连通),利用2分图性质,可看成补图的最大独立集(各点互不连通)……



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.



原创粉丝点击