CoVH之柯南开锁 vijos1204 最大匹配

题目大意:有一个n*m的01矩阵,每一次操作可以使某一行或一列的1全变0,求最少的使所有1变0的操作次数。

方法:对于每一个1,我们把它所在行和所在列连一条边,从而构造一个二分图,然后求最大匹配就是答案了。

下面附程序:

var
  n,m,i,j,ans:longint;
  a:array[1..100,1..100] of boolean;
  v:array[1..100] of boolean;
  link:array[1..100] of longint;
  x:char;

function find(x:longint):boolean;
var
  p,i:longint;
begin
  find:=false;
  for i:=1 to m do
    if (v[i])and(a[x,i]) then
    begin
      p:=link[i];
      link[i]:=x;
      v[i]:=false;
      if (p=0)or(find(p)) then exit(true);
      link[i]:=p;
    end;
end;

begin
  fillchar(a,sizeof(a),false);
  readln(n,m);
  for i:=1 to n do
    for j:=1 to m do
    begin
      if j<m
        then read(x)
        else readln(x);
      if x='1' then a[i,j]:=true;
    end;
  for i:=1 to n do
  begin
    fillchar(v,sizeof(v),true);
    if find(i) then inc(ans);
  end;
  writeln(ans);
end.


你可能感兴趣的:(CoVH之柯南开锁 vijos1204 最大匹配)