简单基础网络流,用sap算法,不过这道题有多重边,被阴了,WA一次,还有就是这题有多组数据(居然没看到...)

program poj1273;
var
  n,m,i,j,i1,j1:integer;
  ans,min,p:longint;
  flag:boolean;
  g:array[1..200,1..200] of longint;
  fir,now,t,num,liu:array[0..200] of longint;(fir[i]是表示增广路i的前一个节点,now[i]是当前边的两个端点为i,now[i],t[i]是顶点数为i的节点的个数,num[i]是第i个节点的编号,liu[i]是当前节点1到i的流量
procedure init;
var
  x,y,z:longint;
begin
  readln(m,n);
  for i:=1 to m do
  begin
    readln(x,y,z);
    inc(g[x,y],z);
  end;
end;
begin
  while not eof do
  begin
    fillchar(g,sizeof(g),0);
    fillchar(fir,sizeof(fir),0);
    fillchar(now,sizeof(now),0);
    fillchar(t,sizeof(t),0);
    fillchar(num,sizeof(num),0);
    fillchar(liu,sizeof(liu),0);
    init;
    t[0]:=n;
    for i:=1 to n do
      now[i]:=1;
    ans:=0;
    i:=1;
    p:=maxlongint;
    while num[i]<n do
    begin
      flag:=false;
      liu[i]:=p;
      for j:=now[i] to n do
        if (g[i,j]>0) and (num[j]+1=num[i]) then
        begin
          flag:=true;
          if g[i,j]<p then p:=g[i,j];
          fir[j]:=i;
          now[i]:=j;
          i:=j;
          if i=n then
          begin
            inc(ans,p);
            while i<>1 do
            begin
              i1:=i;
              i:=fir[i];
              dec(g[i,i1],p);
              inc(g[i1,i],p);
            end;
            p:=maxlongint;
          end;
          break;
        end;
      if flag then continue;
      min:=n-1;//没有允许弧了,需要重标号
      for j:=1 to n do
        if (g[i,j]>0) and (num[j]<min) then
        begin
          j1:=j;
          min:=num[j];
        end;
      now[i]:=j1;
      dec(t[num[i]]);//GAP优化
      if t[num[i]]=0 then break;
      num[i]:=min+1;
      inc(t[num[i]]);
      if i<>1 then
      begin
        i:=fir[i];
        p:=liu[i];
      end;
    end;
    writeln(ans);
  end;
end.