您的位置:首页 > 其它

pku1325 Machine Schedule

2012-03-04 17:31 197 查看
有两台机器A,B,分别有n,m个进程,有k个任务,每个任务要么在A的x进程上完成,要么在B的y进程上完成,但机器换进程要时间,求完成方案下的最短时间。

最小覆盖问题,

通式:方案有两个,作为二分图的对立点,而任务为点,完成每一个任务的两种方案连边,求最大匹配即可,因为“最小覆盖=最大匹配”

很不理解输入里面的那个i有什么用??

View Code

program pku1325(input,output);
var
f     : array[0..201,0..201] of boolean;
lk     : array[0..201] of longint;
v     : array[0..201] of boolean;
n,m,k : longint;
procedure init;
var
i,ii,xx,yy : longint;
begin
fillchar(f,sizeof(f),false);
fillchar(lk,sizeof(lk),0);
for i:=1 to k do
begin
readln(ii,xx,yy);
f[xx,yy+n]:=true;
end;
end; { init }
function find(now : longint):boolean;
var
i : longint;
begin
for i:=n+1 to n+m do
if (not v[i])and(f[now,i]) then
begin
v[i]:=true;
if (lk[i]=0)or(find(lk[i])) then
begin
lk[i]:=now;
exit(true);
end;
end;
exit(false);
end; { find }
function main():longint;
var
i : longint;
begin
main:=0;
for i:=1 to n do
begin
fillchar(v,sizeof(v),false);
if find(i) then
inc(main);
end;
exit(main);
end; { main }
begin
read(n);
while n<>0 do
begin
readln(m,k);
init;
writeln(main);
read(n);
end;
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: