zoukankan      html  css  js  c++  java
  • 【CodeVS】1993草地排水

    题目描述 Description

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

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

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

    输入描述 Input Description

    第1行: 两个用空格分开的整数N (0 <= N <= 200) 和 M (2 <= M <= 200)。N是农夫John已经挖好的排水沟的数量,M是排水沟交叉点的数量。交点1是水潭,交点M是小溪。

    第二行到第N+1行: 每行有三个整数,Si, Ei, 和 Ci。Si 和 Ei (1 <= Si, Ei <= M) 指明排水沟两端的交点,雨水从Si 流向Ei。Ci (0 <= Ci <= 10,000,000)是这条排水沟的最大容量。

    输出描述 Output Description

    输出一个整数,即排水的最大流量。

    样例输入 Sample Input
    5 4
    1 2 40
    1 4 20
    2 4 20
    2 3 30
    3 4 10
    样例输出 Sample Output

    50

    数据范围及提示 Data Size & Hint

     Dinic模板

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <queue>
     6 #define    inf 1e9 
     7 #define N 200
     8  
     9 using namespace std;
    10 
    11 int n,m,tn;
    12 int next[2*N+10],point[2*N+10],v[2*N+10],remain[2*N+10],deep[N+10],cur[N+10];
    13  
    14 void se(int x,int y,int cap) 
    15 {
    16     tn++; next[tn]=point[x]; point[x]=tn; v[tn]=y; remain[tn]=cap;
    17     tn++; next[tn]=point[y]; point[y]=tn; v[tn]=x; remain[tn]=0; 
    18 } 
    19 
    20 inline bool bfs(int s,int t) 
    21 {
    22     memset(deep,0x7f,sizeof(deep));
    23     for (int i=1;i<=n;i++)    cur[i]=point[i];
    24     deep[s]=0;
    25     queue<int> q;
    26     q.push(s);
    27     while (!q.empty()) 
    28     {
    29         int now=q.front();    
    30         q.pop();
    31         for (int tn=point[now];tn!=-1;tn=next[tn])
    32             if (deep[v[tn]]>inf && remain[tn])
    33                 deep[v[tn]]=deep[now]+1,q.push(v[tn]);
    34     }
    35     return deep[t]<inf;
    36 }
    37 
    38 int dfs(int now,int t,int limit)
    39 {
    40     if (!limit || now==t)    return limit;
    41     int flow=0,f;
    42     for (int tn=cur[now];tn!=-1;tn=next[tn])
    43      {
    44         cur[now]=tn;
    45         if (deep[v[tn]]==deep[now]+1 && (f=dfs(v[tn],t,min(limit,remain[tn]))))    
    46         {
    47             flow+=f;
    48             limit-=f;
    49             remain[tn]-=f;
    50              remain[tn^1]+=f; 
    51             if (!limit)    break;
    52         }        
    53     } 
    54     return flow;
    55 }
    56 
    57 int dinic(int s,int t) 
    58 {
    59     int ans=0;
    60     while (bfs(s,t)) ans+=dfs(s,t,inf);
    61     return ans;
    62 } 
    63 
    64 int main() 
    65 {
    66     int a,b,cap;
    67     tn=-1;
    68     memset(next,-1,sizeof(next));
    69     memset(point,-1,sizeof(point));
    70     scanf("%d%d",&m,&n);
    71     for (int i=1;i<=m;i++) 
    72     {
    73         scanf("%d%d%d",&a,&b,&cap);
    74         se(a,b,cap);
    75     }
    76     printf("%d
    ",dinic(1,n));
    77     return 0;
    78 } 
    有的模板还是背背好
    —Anime Otaku Save The World.
  • 相关阅读:
    jq 字符串去除空格
    wpf 加载资源文件
    wpf 寻找TreeView的子元素,并对其进行操作
    IIS发布MVC ASP.NET网站
    wpf Binding 小记录
    asp.net mvc表单异步提交
    把路径设置为全局变量
    MVC将服务器端的物理路径转换为服务器路径
    silverlight控件阴影效果示例
    NLP的12条前提假设
  • 原文地址:https://www.cnblogs.com/DMoon/p/5198552.html
Copyright © 2011-2022 走看看