Machine Schedule SSL_1342(最大匹配)

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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值