USACO草地排水-网络流dinic模板

广搜计算层次图,在层次图上深搜。标准dinic模板。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<vector>
 5 #include<queue>
 6 #include<cmath>
 7 #include<algorithm>
 8 #include<string.h>
 9 #define INF 0x7fffffff
10 using namespace std;
11 struct edge{
12        int to,f,rev;
13 };
14 int ch[210];
15 int N,M,ans;
16 vector <edge> E[210];
17 void add_edge(int s,int e,int c){
18      E[s].push_back((edge){e,c,E[e].size()});
19      E[e].push_back((edge){s,0,E[s].size()-1});
20 }
21 bool bfs()
22 {
23      memset(ch,-1,sizeof(ch));
24      queue <int> que;
25      que.push(1);
26      ch[1]=0;
27      while(que.size()!=0){
28                           int now=que.front();que.pop();
29                           for(int i=0;i<E[now].size();i++){
30                                   if(ch[E[now][i].to]==-1&&E[now][i].f>0){
31                                                            ch[E[now][i].to]=ch[now]+1;
32                                                            que.push(E[now][i].to);
33                                   }
34                           }
35      }
36      if(ch[M]==-1) return false;
37      return true;
38 }
39 int dfs(int now,int maxf)
40 {
41      if(now==M) return maxf;
42      if(maxf==0) return 0;
43      for(int i=0;i<E[now].size();i++){
44              if(ch[E[now][i].to]==ch[now]+1 && E[now][i].f>0){
45                                              int maxn=dfs(E[now][i].to,min(E[now][i].f,maxf));
46                                              if(maxn>0){
47                                                         E[now][i].f-=maxn;
48                                                         E[E[now][i].to][E[now][i].rev].f+=maxn;
49                                                         return maxn;
50                                                         }
51              }
52      }
53      return 0;
54 }
55
56
57
58 int main()
59 {
60     int f,s,e,c;
61     scanf("%d%d",&N,&M);
62     for(int i=0;i<N;i++){
63             scanf("%d%d%d",&s,&e,&c);
64             add_edge(s,e,c);
65
66     }
67     while(bfs()){
68                  while((f=dfs(1,INF))>0){
69                            ans+=f;
70                  }
71     }
72     cout<<ans<<endl;
73
74     return 0;
75 }
时间: 2024-10-05 19:21:43

USACO草地排水-网络流dinic模板的相关文章

POJ 1273 Drainage Ditches (网络流Dinic模板)

Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is covered by water for awhile and takes quite a long time to regrow. Thus, Farmer John has built a set of drainage

网络流dinic模板

#include <iostream> #include <cstdlib> #include <stdio.h> #include <map> #include <cstring> #include <math.h> #include <stdlib.h> #define ll long long #define INF 0x3f3f3f3f #define cle(a) memset(a,0,sizeof(a)) us

网络流算法模板

通过USACO草地排水学习了一下网络流,终于写好了几个模板. 最大流 BFS求增广路径 简述:通过BFS在网络中找出一条最短增广路径并修改流量(前向弧加可改进量X,后向弧则减去X),当不存在增广路径时得出最大流,时间效率O(nm^2). { ID: qty1272 PROG: ditch LANG: PASCAL } program ditch; var c,f:array[0..200,0..200]of longint; path,u:array[0..200]of longint; n,i

【USACO】草地排水

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

[网络流dinic]日常翻新

之前的排版简直辣眼睛,重写一遍好了 模板题是草地排水poj1273 网络流的基础思想就是瞎基本搜 但是搜要搜得有技巧,有特色 最简单的搜,无限深搜直到终点 稍微改进一下,宽搜先标号然后按层搜 再改进一下,把某些确定不再使用的点剔除 要点在于建立反向边给自己一个反悔的机会,用^1找到反向边 #include <stdio.h> #include <queue> #include <algorithm> #include <string.h> using nam

草地排水 Drainage Ditches

网络流Dinic算法模板题 题目描述 在农夫约翰的农场上,每逢下雨,贝茜最喜欢的三叶草地就积聚了一潭水.这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间.因此,农夫约翰修建了一套排水系统来使贝茜的草地免除被大水淹没的烦恼(不用担心,雨水会流向附近的一条小溪).作为一名一流的技师,农夫约翰已经在每条排水沟的一端安上了控制器,这样他可以控制流入排水沟的水流量. 农夫约翰知道每一条排水沟每分钟可以流过的水量,和排水系统的准确布局(起点为水潭而终点为小溪的一张网).需要注意的是,有些时候从

codevs1993 草地排水(最大流)

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

luogu P2740 [USACO4.2]草地排水Drainage Ditches

P2740 [USACO4.2]草地排水Drainage Ditches 2017-09-17 题目背景 在农夫约翰的农场上,每逢下雨,贝茜最喜欢的三叶草地就积聚了一潭水.这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间.因此,农夫约翰修建了一套排水系统来使贝茜的草地免除被大水淹没的烦恼(不用担心,雨水会流向附近的一条小溪).作为一名一流的技师,农夫约翰已经在每条排水沟的一端安上了控制器,这样他可以控制流入排水沟的水流量. 题目描述 农夫约翰知道每一条排水沟每分钟可以流过的水量,和

【CodeVS】1993草地排水

题目描述 Description 在农夫约翰的农场上,每逢下雨,Bessie最喜欢的三叶草地就积聚了一潭水.这意味着草地被水淹没了,并且小草要继续生长还要花相当长一段时间.因此,农夫约翰修建了一套排水系统来使贝茜的草地免除被大水淹没的烦恼(不用担心,雨水会流向附近的一条小溪).作为一名一流的技师,农夫约翰已经在每条排水沟的一端安上了控制器,这样他可以控制流入排水沟的水流量. 农夫约翰知道每一条排水沟每分钟可以流过的水量,和排水系统的准确布局(起点为水潭而终点为小溪的一张网).需要注意的是,有些时