zoukankan      html  css  js  c++  java
  • 【Codevs1993】草地排水(最大流,Dinic)

    题意:在农夫约翰的农场上,每逢下雨,Bessie最喜欢的三叶草地就积聚了一潭水。这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间。因此,农夫约翰修建了一套排水系统来使贝茜的草地免除被大水淹没的烦恼(不用担心,雨水会流向附近的一条小溪)。作为一名一流的技师,农夫约翰已经在每条排水沟的一端安上了控制器,这样他可以控制流入排水沟的水流量。

    农夫约翰知道每一条排水沟每分钟可以流过的水量,和排水系统的准确布局(起点为水潭而终点为小溪的一张网)。需要注意的是,有些时候从一处到另一处不只有一条排水沟。

    根据这些信息,计算从水潭排水到小溪的最大流量。对于给出的每条排水沟,雨水只能沿着一个方向流动,注意可能会出现雨水环形流动的情形。

     (0 <= N <= 200) 和 M (2 <= M <= 200)

    Si 和 Ei (1 <= Si, Ei <= M) 指明排水沟两端的交点,雨水从Si 流向Ei。Ci (0 <= Ci <= 10,000,000)是这条排水沟的最大容量。

    思路:最大流,Dinic模板。

     1 var head,vet,next,len,gap,dis,fan:array[0..10000]of longint;
     2     n,m,i,x,y,z,tot,src,source:longint;
     3 
     4 procedure add(a,b,c:longint);
     5 begin
     6  inc(tot);
     7  next[tot]:=head[a];
     8  vet[tot]:=b;
     9  len[tot]:=c;
    10  head[a]:=tot;
    11 end;
    12 
    13 function min(x,y:longint):longint;
    14 begin
    15  if x<y then exit(x);
    16  exit(y);
    17 end;
    18 
    19 function dfs(u,aug:longint):longint;
    20 var e,v,t,val,flow:longint;
    21 begin
    22  if u=src then exit(aug);
    23  flow:=0; val:=n-1;
    24  e:=head[u];
    25  while e<>0 do
    26  begin
    27   v:=vet[e];
    28   if len[e]>0 then
    29   begin
    30    if dis[u]=dis[v]+1 then
    31    begin
    32     t:=dfs(v,min(len[e],aug-flow));
    33     len[e]:=len[e]-t;
    34     len[fan[e]]:=len[fan[e]]+t;
    35     flow:=flow+t;
    36     if dis[source]>=n then exit(flow);
    37     if aug=flow then break;
    38    end;
    39    val:=min(val,dis[v]);
    40   end;
    41   e:=next[e];
    42  end;
    43  if flow=0 then
    44  begin
    45   dec(gap[dis[u]]);
    46   if gap[dis[u]]=0 then dis[source]:=n;
    47   dis[u]:=val+1;
    48   inc(gap[dis[u]]);
    49  end;
    50  exit(flow);
    51 end;
    52 
    53 function maxflow:longint;
    54 var ans:longint;
    55 begin
    56  fillchar(dis,sizeof(dis),0);
    57  fillchar(gap,sizeof(gap),0);
    58  gap[0]:=n; ans:=0;
    59  while dis[source]<n do ans:=ans+dfs(source,maxlongint);
    60  exit(ans);
    61 end;
    62 
    63 begin
    64 
    65  readln(m,n);
    66  for i:=1 to m do
    67  begin
    68   readln(x,y,z);
    69   fan[tot+1]:=tot+2;
    70   fan[tot+2]:=tot+1;
    71   add(x,y,z);
    72   add(y,x,0);
    73  end;
    74  source:=1; src:=n;
    75  writeln(maxflow);
    76 
    77 end.
  • 相关阅读:
    Castle Windsor 学习-----Installer的几种安装方式
    asp.net mvc源码分析-Route的GetRouteData
    查看iis对应w3wp.exe显示的进程ID号(转载)
    jvisualvm安装Visual GC插件
    Modelsimse10.4如何编译altera库文件以支持IP仿真
    sublime text3 配置使用
    Modelsim调用用do脚本自动化仿真
    Quartus16.0如何使用TCL脚本
    Java中使用Timer和TimerTask实现多线程
    框架导论
  • 原文地址:https://www.cnblogs.com/myx12345/p/6122347.html
Copyright © 2011-2022 走看看