Description
我们现在有两台机器,A和B。 A机器有n个工作模式,分别为 mode_0、mode_1….mode_n-1,B机器有m个工作模式:mode_0、mode_1….mode_m-1,我们现在有一些工作,每个工作可以用一个三元组来描述(i,x, y ),表示这个工作的编号为i,它可以在A机器的mode_x下或B机器的mode_y模式下被完成。
我们现在有t个工作,去交给A、B两机器完成,机器如果改变一个模式需要人工去操作…
请你排出工作表,以使人工操作的次数最少。
Input
n,m,k (n, m < 100) and k (k < 1000).
下接k行描述这k件工作。
Output
人工操作最少次数。
Sample Input
5 5 10
0 1 1
1 1 2
2 1 3
3 1 4
4 2 1
5 2 2
6 2 3
7 2 4
8 3 3
9 4 3
0
Sample Output
3
var
map:array[0..101,0..101] of boolean;
link:array[0..101] of longint;
cover:array[0..101] of boolean;
i,j,k,n,m,x,y,z,ans:longint;
function find(i,j:longint):boolean;
var
k,q:longint;
begin
find:=true;
for k:=1 to j do
if (map[i,k]) and (not(cover[k]))
then begin
q:=link[k];
link[k]:=i;
cover[k]:=true;
if (q=0) or (find(q,j)) then exit;
link[k]:=q;
end;
exit(false);
end;
begin
readln(n,m,k);
for i:=1 to k do
begin
readln(z,x,y);
map[x,y]:=true;
end;
readln(k);
for i:=1 to n do
begin
fillchar(cover,sizeof(cover),false);
find(i,m);
end;
for i:=1 to n+m do
if link[i]<>0 then inc(ans);
writeln(ans);
end.