记录编号 22784 评测结果 AAAAAAAAAA
题目名称 总流量 最终得分 100
用户昵称 Gravatarybh 是否通过 通过
代码语言 Pascal 运行时间 0.005 s
提交时间 2010-12-25 12:40:10 内存使用 0.15 MiB
显示代码纯文本
{总流量
 网络流
 Author: yangbohua
 Time: 2010-12-24}

program tflow;
var
  limit:array[0..100,0..100] of longint;
  d,vd:array[0..100] of longint;
  n,m,i,temp1,temp2,r1,maxflow:longint;
  r:char;

function min(a,b:longint):longint;
begin
  if a>b
    then min:=b
    else min:=a;
end;

function dfs(u,flow:longint):longint;
var
  v,tmp,dfs2:longint;
begin
  if u=n
    then exit(flow);
  dfs2:=0;
  for v:=1 to 52 do
  begin
    if (limit[u,v]>0) and (d[u]=d[v]+1) then
    begin
      tmp:=dfs(v,min(flow-dfs2,limit[u,v]));
      dec(limit[u,v],tmp);
      inc(limit[v,u],tmp);
      dfs2:=dfs2+tmp;
      if dfs2=flow then exit(flow);
    end;
  end;
  if d[1]>=n
    then exit(dfs2);
  dec(vd[d[u]]);
  if vd[d[u]]=0
    then d[1]:=n;
  inc(d[u]);
  inc(vd[d[u]]);
  dfs:=dfs2;
end;

begin
  assign(input,'tflow.in');
  reset(input);
  assign(output,'tflow.out');
  rewrite(output);

  fillchar(limit,sizeof(limit),0);
  readln(m);
  for i:=1 to m do
  begin
    read(r);
    if (r>='A') and (r<='Z') then
    begin
      temp1:=ord(r)-ord('A')+1;
    end;
    if (r>='a') and (r<='z') then
    begin
      temp1:=ord(r)-ord('a')+1+26;
    end;
    read(r);
    read(r);
    if (r>='A') and (r<='Z') then
    begin
      temp2:=ord(r)-ord('A')+1;
    end;
    if (r>='a') and (r<='z') then
    begin
      temp2:=ord(r)-ord('a')+1+26;
    end;
    readln(r1);
    if temp1=26 then temp1:=52
    else if temp1=52 then temp1:=26;
    if temp2=26 then temp2:=52
    else if temp2=52 then temp2:=26;
    inc(limit[temp1,temp2],r1);
    inc(limit[temp2,temp1],r1);
  end;

  n:=52;
  vd[0]:=n;
  maxflow:=0;
  while d[1]<n do
    inc(maxflow,dfs(1,maxlongint));
  writeln(maxflow);

  close(input);
  close(output);
end.