usaco上的一道二分图匹配模板题,直接用匈牙利即可。注意不要直接交usaco程序
,poj上的是多组测试数据。
var
n,m,i,j:longint;
a:array[1..200,1..200]of longint;
s,match:array[1..200]of longint;
h:array[1..200]of boolean;
function check(v:longint):boolean;
var i:longint;
begin
for i:=1 to s[v] do
if(not h[a[v,i]])then
begin
h[a[v,i]]:=true;
if(match[a[v,i]]=0)or(check(match[a[v,i]]))then
begin
match[a[v,i]]:=v;
exit(true);
end;
end;
exit(false);
end;
procedure hungarian;
var i,ans:longint;
begin
ans:=0;
for i:=1 to n do
begin
fillchar(h,sizeof(h),0);
if(check(i))then inc(ans);
end;
writeln(ans);
end;
begin
readln(n,m);
while(not eof)do
begin
for i:=1 to n do
begin
read(s[i]);
for j:=1 to s[i] do read(a[i][j]);
end;
fillchar(match,sizeof(match),0);
hungarian;
readln(n,m);
end;
end.
,poj上的是多组测试数据。