poj1273完全不懂为何过的dinic最大流模板

[译]网络流Dinic算法-最大流-HDU1532&POJ1273 POJ1273 HDU1532 Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 51941   Accepted: 19732 Description 在农夫约翰的农场上,每逢下雨,Bessie最喜欢的三叶草地就 阅读详情
Drainage Ditches
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 67615 Accepted: 26138

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 ditches so that Bessie's clover patch is never covered in water. Instead, the water is drained to a nearby stream. Being an ace engineer, Farmer John has also installed regulators at the beginning of each ditch, so he can control at what rate water flows into that ditch. 
Farmer John knows not only how many gallons of water each ditch can transport per minute but also the exact layout of the ditches, which feed out of the pond and into each other and stream in a potentially complex network. 
Given all this information, determine the maximum rate at which water can be transported out of the pond and into the stream. For any given ditch, water flows in only one direction, but there might be a way that water can flow in a circle. 

Input

The input includes several cases. For each case, the first line contains two space-separated integers, N (0 <= N <= 200) and M (2 <= M <= 200). N is the number of ditches that Farmer John has dug. M is the number of intersections points for those ditches. Intersection 1 is the pond. Intersection point M is the stream. Each of the following N lines contains three integers, Si, Ei, and Ci. Si and Ei (1 <= Si, Ei <= M) designate the intersections between which this ditch flows. Water will flow through this ditch from Si to Ei. Ci (0 <= Ci <= 10,000,000) is the maximum rate at which water will flow through the ditch.

Output

For each case, output a single integer, the maximum rate at which water may emptied from the pond.

Sample Input

5 4
1 2 40
1 4 20
2 4 20
2 3 30
3 4 10

Sample Output

50


先来说说dinic,dinic算法可以分为三步,第一步用bfs构建出层次图,第二步用dfs求出一条路的最大流,第三步加和重复以上两步。

其次是关于反向边的理解,当一条边已经被完全占用的时候,可以利用反向边使得另外一条边的流可以从这条边的终点流向起点,其实就是一种替换的意思,用反向边的流替换本不应该从这里流过的流。这里感觉有点说不清楚了,其实本身也不是很明白,虽然看不懂不影响套模板……详细见这个博客https://comzyh.com/blog/archives/568/,对于反相弧说的很好。


贴代码

#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;


struct node
{
	int c,f;
};
int INF=10000001;
int d[220],vis[220];
int st,et,i,j,k,m,n;
node map[220][220];

int bfs()
{   
	memset(d,0,sizeof(d));
	queue<int> q;
	q.push(st);
	d[st]=1;
	while(!q.empty())
	{   int pos=q.front();
	    q.pop();
		for(int i=1;i<=n;i++)
		{
			if((map[pos][i].c-map[pos][i].f) && d[i]==0)
		     {
		     	d[i]=d[pos]+1;
		     	q.push(i);
			 }
		}
	}
	if(d[et]==0)return 0;
	  else return 1;
}


int dinic(int pos,int flow)  
{   int ff=flow;
	if(pos==et)return flow;
	int sum=0;
	for(int i=1;i<=n;i++)
	{
		if(d[pos]+1==d[i] && (map[pos][i].c-map[pos][i].f))
		{
			int a=map[pos][i].c-map[pos][i].f;
			int t=dinic(i,min(a,flow));
			map[pos][i].f+=t;
			map[i][pos].f-=t;   //注意反向弧 
			//printf("liu:%d->%d:%d\n",pos,i,t);   
			flow-=t;
			sum+=t;
		}
	}
	return ff-flow;
}

int main()
{
	while(~scanf("%d%d",&m,&n))
	{   memset(map,0,sizeof(map));
		et=n; 
		st=1;
		for(int i=1;i<=m;i++)
		{   int x,y,s;
			scanf("%d%d%d",&x,&y,&s);
			map[x][y].c+=s;  //注意两点间的重边,用加法	
		}
		int Sum=0;
		while(bfs())
		{
			Sum+=dinic(st,INF);
		}
		printf("%d\n",Sum);
	}
	return 0;
 } 

依旧不懂邻接表,依旧不懂前向星,真的要挂了……


VMware 17+Win10 22H2全栈配置指南|UEFI优化+GPU直通实战 ​VMware下载:下载官网版本的Wmare 17 Pro (点击直达链接 )企业用户可选永久许可证,个人学习也可以直接安装使用,Win10镜像:微软官网下载22H2版ISO文件(附官方纯净版渠道 ) 阅读详情

相关推荐

基于STM32的INA226电压电流检测仪

该功率检测装置以STM32F103C8T6微控制器为核心,集成功率检测、数据交互、状态显示和用户提示功能,通过模块化设计实现稳定运行。系统包括按键、LED指示灯、OLED屏幕、INA226电压电流检测、复位电路、晶振电路、蜂鸣器驱动、输入输出接口、调试接口和3.3V降压电路等模块。微控制器通过按键检测用户输入,启动功率检测,采集数据并通过OLED显示,异常情况触发蜂鸣器报警,LED状态指示同步反馈。3.3V降压电路为所有模块提供稳定电源,晶振电路确保时序精度。INA226芯片通过I2C接口与微控制器通信,实

a2784288164的博客 1908

Dinic算法解决最大流问题poj1273

poj1273 经典的网络流例子 这里结网络流使用的是dinic 算法 相比于EdmondsKarp算法 每次bfs一次才可以找到一条增广路径的效率太低了 dinic算法 先使用bfs对图进行分层 分完层后 不断的进行dfs 搜索增广路径 直到图中不可以dfs的栈为空后 再进行重新分分层 然后再不断的进行dfs搜索增广路径 直到bfs不能再到达汇点 返回最大流includ

专栏 618

具身智能:从理论突破到场景落地的全解析

具身智能(Embodied Intelligence)是人工智能与机器人学深度融合的前沿领域,其核心在于通过物理实体与环境的动态交互实现智能行为。区别于传统 AI 的 “离身性”(如语音助手仅依赖数据输入),具身智能强调 “智能体通过身体感知世界并反作用于环境”,形成 “感知 - 决策 - 行动” 的闭环。例如,能自主避障的配送机器人、可精准抓取异形物体的机械臂,均通过传感器网络与环境实时互动,在试错中优化行为策略。

LeeKumaの技术Note 2678

poj1273 Drainage Ditches(最大流EKarp+Dinic+模板总结)

http://poj.org/problem?id=1273 题意:农夫的田野每次一到下雨就会被淹没,这让他很苦恼。于是修了好多渠沟,编号为1作为池塘,编号为n作为小溪,求从池塘到小溪的最大排水量。 ps:最大流第一题。 思路:花了一段时间来入门,这个是EKarp的教程,并且参考了这个代码。现在感觉这个算法好神奇。首先扩展方式精辟,按照我们普通的想法,每找到一条增广路,就

Iguodala的博客 658

《生化危机9:安魂曲》D加密免BIOS破解方案详解

数字版权管理(DRM)技术通过加密手段保护软件版权,Denuvo(D加密)作为主流方案常应用于3A游戏。其原理是通过实时验证机制阻止未授权访问,但可能影响性能表现。本文以《生化危机9》为例,解析一种免BIOS修改的D加密绕过方案,该方案通过授权启动器模拟正版验证流程,保持系统零侵入性。实测表明,该方法在GTX 1060至RTX 3070等多硬件平台均能稳定运行,支持MOD扩展且兼容Reshade画质增强,为玩家提供开箱即用的绿色版体验。

weixin_33898233的博客 924

卷积操作复杂度公式推导

复杂度Hout⋅Wout⋅Cout⋅Cin⋅k2\text{复杂度} = H_{\text{out}} \cdot W_{\text{out}} \cdot C_{\text{out}} \cdot C_{\text{in}} \cdot k^2复杂度Hout​⋅Wout​⋅Cout​⋅Cin​⋅k2该公式反映了卷积核作用于每个像素时的局部操作和跨通道的计算需求。卷积计算复杂度与输入尺寸线性相关。

qq_41037856的博客 1306

[转载 ]POJ 1273 最大流模板

转载 百度文库花了5分下的不过确实是自己需要的东西经典的最大流题POJ1273 ——其他练习题POJ3436、 题意描述: 现在有m个池塘(从1到m开始编号,1为源点,m为汇点),及n条水渠,给出这n条水渠所连接的池塘和所能流过的水量,求水渠中所能流过的水的最大容量.一道基础的最大流题目。但是模板小心使用,目前只是求单源点的最大流。 参考数据: 输入: 54 1...

LYU0820的博客 160

半导体物理-Si晶体生长方向<2>

Si(硅)晶体的生长方向是一个重要的概念,尤其在半导体工业中。这个概念涉及到晶体在生长过程中原子排列的方向,对晶体的性质和应用有重大影响。让我为您详细解释:理解Si晶体的生长方向对于半导体材料的研究和应用非常重要,它直接影响了最终器件的性能和制造工艺。在实际应用中,选择适当的生长方向可以优化器件性能,提高产品质量。

m0_37606066的博客 2989

最大流dinic模板 poj1273

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 t...

Lily1221的博客 249

斑鬣狗优化算法(SHO)详解:从生物原理到代码实战

斑鬣狗优化算法(SHO)是一种新型元启发式优化算法,灵感来源于斑鬣狗的群体狩猎行为。该算法通过模拟斑鬣狗的包围猎物、协同狩猎和攻击猎物等生物行为,将优化问题转化为智能搜索过程。SHO算法包含探索与开发两个阶段,通过数学模型实现群体协作和自适应平衡,具有参数简单、收敛快等优势。文章系统介绍了SHO的生物基础、数学模型、实现方法(包括MATLAB和Python代码)、改进策略以及在函数优化、路径规划等领域的应用案例,最后讨论了算法的优势、局限性和未来研究方向。

qq_42212808的博客 237

智能筛选栏 SmartFilterBar 全面解析与实战指南

SmartFilterBar 把复杂的检索界面“模板化”,让开发者聚焦业务逻辑与后端数据质量,而非 UI 小细节。通过精准运用 CDS 注解与 OData 元数据,它能在几毫秒内拼装出专业级筛选体验;结合事件钩子与控制配置,又足以满足极端个性化需求。拥抱 SmartFilterBar,意味着在 Fiori 生态中以最少代码赢得最快价值交付——这正是现代企业应用开发追求的极致效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 402

poj1273Drainage Ditches最大流[dinic算法]

这题太经典,可以作为所有最大流算法的入门题...所以昨天搞了好久dinic,愣是没明白建图那一步.后来干脆抛开那些代码,自己根据对dinic的理解写.没想到还能做出来! 好惊喜... 唉,也说说自己的感受吧,网上关于这方面的文章什么的太多了,而且各有各的理解,昨晚好痛苦,看了无数篇博客文章,总算理解到算法最关键的部分了.也给自己留个教训:别总想着模板,好习惯什么的,甚至还担心如果建图甚么的没做好

When you go away 1218

Python 爬虫实战:网站反爬机制绕过终极指南(技术原理 + 实战代码 + 避坑技巧)

在 Python 爬虫的世界里,反爬机制是每一个爬虫开发者都必须面对的挑战。网站为了保护自身数据不被恶意爬取,会设置各种反爬机制,这使得爬虫开发变得更加复杂和有趣。本文将详细介绍常见的网站反爬机制及其绕过方法,结合技术原理、实战代码和避坑技巧,帮助你成为一名优秀的爬虫开发者。

u014481728的博客 1004

最大流模板更新(Dinic)...POJ-1273

明天就要出发去武汉了..刚才更新了下最大流的模板...较之以前的代码..本次更新主要是两方面...      1.链表存边采取存2*M边,也就是在读入时就将其反向边开在相邻的位置..那么在做剩余网络时就能直接用了..省空间省时间..      2.DFS当找到一条增广路后..回朔到一个还剩了流量的位置..这使得BFS每次对点分一次层,都最大限度的利用完..真正体现出Dinic的优势..

zzyzzy12 952

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

poj 1273最大流dinic算法模板

#include #include #define N 300 #define inf 0x7fffffff #include using namespace std; struct node {   int u,v,w,next; }bian[N*4]; int head[N],yong,d[N],s,t; void addedge(int u,int v,int w) {

晴朗的博客 632

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

[POJ 1273] Drainage Ditches 最大流 模板题

题目传送门:【BZOJ 1273】 题目大意:Farmer John 担心他的三叶草被雨淋坏了,于是他修建了许多的排水沟将雨引到附近的一条小溪中。作为一名优秀的工程师,他有办法控制通过排水沟的水量。他不仅知道排水沟每分钟能运走多少水,还清楚它的详细结构。这些排水沟连接着一旁的池塘和小溪。现在,他想问你,这个排水沟将水从池塘引向小溪所允许的最大流量是多少。 输入多组数据,每组数据的第一行

江澤妮可 500

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

最大流算法

最大流算法 网络流基础概念 网络流 在一个有向图G=(V,E)G= (V,E)G=(V,E)中: 有一个唯一的源点S(入度为000:出发点) 有一个唯一的汇点T(出度为000:结束点) 图中的每一条边都一个非负的权值,这个权值叫做容量c(u,v)c(u, v)c(u,v) 满足上述条件的图GGG称为网络流图,记为G=(V,E,C)G= (V,E,C)G=(V,E,C) 可以想象成,如果把每条边...

Psychosocial的博客 1万+

最大流 poj 1273 Dinic 模板

链接:http://poj.org/problem?id=1273 引用大牛博客详解:http://comzyh.com/blog/archives/568/#Dinic-Code Dinic: ford-fulkerson 算法通过dfs来寻找增广路,dinic而是总是寻找最短的增广路,并且沿着这条增广。 引入层次图的概念: 也叫分层图,以将从源点到某点的距离来分层,距离相同的为同一层。

liujc_的专栏 497

POJ 1273网络流模板测试

Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 40701   Accepted: 15187 Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite c

cyb6100300115的专栏 2496

POJ 1273 最大流(Dinic算法)

Drainage Ditches Time Limit:1000MS Memory Limit:10000K Total Submissions:90777 Accepted:35220 Description Every time it rain...

xcatf的博客 241

POJ 1273 (Dinic模板 + 当前弧优化)

昨天晚上看明白,今天下午把板子打出来 Dinic简单概括就是 1,利用bfs寻路分层,保证每一次只能从第x层走到第x+1层,省去了很多冗余时间 2,利用dfs递归更新增广路径,如果找不到继续执行步骤1 3,如果步骤1无法分层成功,证明不存在从源点到汇点的一条可行路径,退出程序 当前弧优化: 在此基础上加上当前弧优化,即如果此次dfs进行到点i的时候无法继续搜索,我们下次bfs重新分层后...

STOP 419

最大流的理解以及dinic模板 poj1273

增广路以及残留网络的定义不再赘述了。算导上说的很清楚,证明也有,看懂了就知道怎么求最大流了。 而算导上提到的FF方法以及ek算法的伪代码中都是将流与残留容量分开储存,其实代码实现的时候我们只需存正反向弧的残留容量即可。 然后是对残留网络的一些理解,残留网络中的反向弧是怎么来的? 残留网络的每条边都是这条有向边的残留容量,而残留容量又由公式cf(u,v)=c(u,v)-f(u,v)得到,那么对

、Poppy 2330

高级篇——Dinic最大流算法

#include #include #include #include #define INF 9999999 using namespace std; int n,m; int c[205][205],dis[205]; int BFS() { queueque; memset(dis,-1,sizeof(dis)); dis[1]=0; que.pus

chuck001002004的博客 2656

POj 1273 Drainage Ditches (最大流 Dinic + ISAP 模板)

Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 76183   Accepted: 29594 Description Every time it rains on Farmer John's fields, a pond fo

K键盘里的青春K 447

POJ 1273 Drainage Ditches(最大流Dinic 模板)

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n, m, S, T; const int MAXN = 2010;//点数的最大值 const int MAXM = 1200010;//边数的最大值 const int I...

dixianqi2609的博客 181

poj 1273 Drainage Ditches(最大流E-K +dinic 模板)

题目链接:

Delacour_的专栏 488
上一篇: poj1681Painter's Problem 增广矩阵消元法错误水过版
下一篇: dinic网络流前向星写法
ctrss
博客等级 码龄11年 1粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值