【不可能的任务8/200】hdu1532网络流

(双倍经验题)

第二次写dinic模板,居然一遍写对了,而且短了不少O(∩_∩)O~

 1 #include <cstdio>
 2 #define INF 2147483647
 3 int n,m,ans,x,y,z,M,h,t;long long zl;
 4 int d[201],l[300],fir[201],nex[500],to[500],wei[500];
 5 inline int min(int a,int b){if(a<b) return a;else return b;}
 6 inline void add(int x,int y,int z){to[++M]=y;wei[M]=z;nex[M]=fir[x];fir[x]=M;}
 7 long long dfs(int now,long long flow,long long sum)
 8 {
 9     if(now==n)    return flow;
10     for(int i=fir[now];i && flow;i=nex[i])
11     if(d[to[i]]==d[now]+1 && wei[i])
12         zl=dfs(to[i],min(flow,wei[i]),0),sum+=zl,flow-=zl,wei[i]-=zl,wei[i^1]+=zl;
13     return sum;
14 }
15 bool bfs()
16 {
17     for(int i=1;i<=n;i++) d[i]=0;
18     for(h=1,t=1,l[1]=1,d[1]=1;h<=t;h++)
19         for(int i=fir[l[h]];i;i=nex[i])
20         if(!d[to[i]] && wei[i])
21             l[++t]=to[i],d[l[t]]=d[l[h]]+1;
22     return d[n];
23 }
24 int main()
25 {
26     while(~scanf("%d%d",&m,&n))
27     {
28         for(int i=1;i<=n;i++) fir[i]=0;
29         for(ans=0,M=1;m;m--)
30             scanf("%d%d%d",&x,&y,&z),add(x,y,z),add(y,x,0);
31         while(bfs()) ans+=dfs(1,INF,0);
32         printf("%d\n",ans);
33     }
34     return 0;
35 }

不要管long long,纯属发神经写上去的

时间: 2024-10-14 17:08:35

【不可能的任务8/200】hdu1532网络流的相关文章

HDU1532 网络流:最大流之福德福克森算法

问题描述:约翰是个农民,每次下雨的时候他的庄家总是会被淹没,这就意味着当庄家被水淹后需要很长时间才能重新生长出来,因此,约翰已经建立了一系列排水管道为了使他的庄家尽可能被淹没的最少,也就是说管道的排水量必须很大.作为一名工程师,约翰可以计算出管道网能排水的最大能力. Input:输入包含多组用例,每组用例第一行是两个数N,M,N表示一共有N个管道,M表示一共有M个点,接下来N行每行输入三个数字a,b,c表示,a管道口到b管道口最大排水能力为c. Output:对每一组用例,输出排水量的最大值 S

HDU1532 Drainage Ditches (网络流)

Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 14451    Accepted Submission(s): 6840 Problem Description Every time it rains on Farmer John's fields, a pond forms over Bessie'

hdu1532——Drainage Ditches(网络流模板)

Problem 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 d

hdu1532(网络流)

传送门:Drainage Ditches 题意:给出n个河流,m个点,以及每个河流的流量,求从1到m点的最大流量. 分析:网络流入门题,第一次写按照白书上毫无优化的Ford_fulkerson算法,先练练手感,再去学习sap和dinic算法吧. #pragma comment(linker,"/STACK:1024000000,1024000000") #include <cstdio> #include <cstring> #include <strin

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

[COGS746] [网络流24题] 骑士共存

★★☆   输入文件:knight.in   输出文件:knight.out   简单对比 时间限制:1 s   内存限制:128 MB 骑士共存问题 «问题描述: 在一个n*n个方格的国际象棋棋盘上,马(骑士)可以攻击的棋盘方格如图所示.棋盘 上某些方格设置了障碍,骑士不得进入. «编程任务: 对于给定的n*n个方格的国际象棋棋盘和障碍标志,计算棋盘上最多可以放置多少个骑 士,使得它们彼此互不攻击. «数据输入: 由文件knight.in给出输入数据.第一行有2 个正整数n 和m (1<=n<

hdu 1733 分层网络流 ****

题目大意:有一个类似于迷宫搜索的图,‘.’代表的是无人的路,'X'代表有人的点,'#'代表此点不可通过,'@'代表门口.每个位置每一秒钟只能站一个人,每个位置到上下左右点的时间为1,问你所有人能不能出去,能出去输出所有人都出去的最小时间,否则输出-1. 链接:点我 A: 增加源点src,和汇点dest,然后根据每个时间点建出分层图,每个时间对应一层,对于每层图的构造如下 B:给每个格子标 上号Xi, 由于每个格子一次只能占一人,所以把每个格子分为两个点xa,xb,连上容量为1的有向边,对于格子为

网络流算法模板

通过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

POJ 1273 Drainage Ditches(网络流 最大流)

Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 55893   Accepted: 21449 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