热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[网络流]最大流

网络流最大流最小割题目链接就是一道点割。先说边割边割比较常见。最大流最大流等于最小割,我懒得证。求最大流的思路就是每次尝试找一条从源点到汇点的通路,然后

网络流最大流最小割

题目链接

就是一道点割。

先说边割

边割比较常见。

最大流

最大流等于最小割,我懒得证。

求最大流的思路就是每次尝试找一条从源点到汇点的通路,然后找到这条路上残余流量最小的流量,答案加上这个流量,这条通路上每条边的残余流量减去这个值,反向边加上这个值。

关于反向边,实际上是一个反悔机制。反向流多少,表示正向已经流了多少。也就是说,如果我们从反向边流了一些流量,就相当于从这条边退回了一部分流量。

点割

所谓点割,就是被割掉的不再是边,而是点。思路是将点转化成边。

如上题:将每个点拆成\(i\)\(i+n\)两个点,中间连一条流量为\(1\)的边,将这条边割掉,就相当于割掉这个点。

详见代码。

#include
#include
#include
#include
using namespace std;
long long read(){long long x &#61; 0; int f &#61; 0; char c &#61; getchar();while(c <&#39;0&#39; || c > &#39;9&#39;) f |&#61; c &#61;&#61; &#39;-&#39;, c &#61; getchar();while(c >&#61; &#39;0&#39; && c <&#61; &#39;9&#39;) x &#61; (x <<1) &#43; (x <<3) &#43; (c ^ 48), c &#61; getchar();return f ? -x:x;
}const int INF &#61; 2147483647;
int n, m, s, t;
struct szh{int nxt, to, w;
}a[4004];
int head[203],cnt&#61;1;
void add(int x, int y, int w){a[&#43;&#43;cnt].nxt &#61; head[x], a[cnt].to &#61; y, head[x] &#61; cnt, a[cnt].w &#61; w;
}int dis[203];
bool bfs(){memset(dis, 0, sizeof dis);queue q;q.push(s), dis[s] &#61; 1;while(!q.empty()){int u &#61; q.front();q.pop();for (int i &#61; head[u], v; v &#61; a[i].to, i; i &#61; a[i].nxt)if(a[i].w && !dis[v]) q.push(v), dis[v] &#61; dis[u] &#43; 1;}return dis[t];
}int fir[103];
int dfs(int u, int flow){if(u &#61;&#61; t || !flow) return flow;int ans &#61; 0;for (int &i &#61; fir[u], v; v &#61; a[i].to, i; i &#61; a[i].nxt)//弧优化if(a[i].w && dis[v] &#61;&#61; dis[u] &#43; 1){int x &#61; dfs(v, min(flow, a[i].w));a[i].w -&#61; x, a[i^1].w &#43;&#61; x, ans &#43;&#61; x; //更新残余流量if(!(flow-&#61;x)) break;}return ans;
}void dinic(){int ans &#61; 0;while(bfs()){for (int i &#61; 1; i <&#61; (n <<1); &#43;&#43;i) fir[i] &#61; head[i];//为dfs中取址操作做铺垫ans &#43;&#61; dfs(s,INF);}printf("%d", ans);
}int main(){n &#61; read(), m &#61; read(), s &#61; read(), t &#61; read();s &#43;&#61; n; //源点不能删掉for (int i &#61; 1; i <&#61; n; &#43;&#43;i) add(i, i &#43; n, 1), add(i &#43; n, i, 0);//拆点for (int i &#61; 1; i <&#61; m; &#43;&#43;i){int x &#61; read(), y &#61; read();add(x &#43; n, y, INF), add(y, x &#43; n, 0); //电脑之间不会断&#xff0c;所以连INFadd(y &#43; n, x, INF), add(x, y &#43; n, 0);}dinic(); //模板return 0;
}

转:https://www.cnblogs.com/kylinbalck/p/10590252.html



推荐阅读
  • 来自FallDream的博客,未经允许,请勿转载,谢谢。一天一套noi简直了.昨天勉强做完了noi2011今天教练又丢出来一套noi ... [详细]
  • 题面:P3178[HAOI2015]树上操作好像其他人都嫌这道题太容易了懒得讲,好吧那我讲。题解:第一个操作和第二个操作本质上是一样的&# ... [详细]
  • 题目概述:Sereja 拥有一个由 n 个整数组成的数组 a1, a2, ..., an。他计划执行 m 项操作,这些操作包括更新数组中的特定元素、增加数组中所有元素的值,以及查询数组中的特定元素。 ... [详细]
  • HDU 2537 键盘输入处理
    题目描述了一个名叫Pirates的男孩想要开发一款键盘输入软件,遇到了大小写字母判断的问题。本文提供了该问题的解决方案及实现方法。 ... [详细]
  • 在学习了Splay树的基本查找功能后,可能会觉得它与普通的二叉查找树没有太大的区别,仅仅是通过splay操作减少了时间开销。然而,Splay树之所以被誉为“序列之王”,主要在于其强大的区间操作能力。 ... [详细]
  • STM32代码编写STM32端不需要写关于连接MQTT服务器的代码,连接的工作交给ESP8266来做,STM32只需要通过串口接收和发送数据,间接的与服务器交互。串口三配置串口一已 ... [详细]
  • 本文详细介绍了在MyBatis框架中如何通过#和$两种方式来传递SQL查询参数。使用#方式可以提高执行效率,而使用$则有助于在复杂SQL语句中更好地查看日志。此外,文章还探讨了不同场景下的参数传递方法,包括实体对象、基本数据类型以及混合参数的使用。 ... [详细]
  • 本文介绍了如何使用Java编程语言实现凯撒密码的加密与解密功能。凯撒密码是一种替换式密码,通过将字母表中的每个字母向前或向后移动固定数量的位置来实现加密。 ... [详细]
  • 使用 ModelAttribute 实现页面数据自动填充
    本文介绍了如何利用 Spring MVC 中的 ModelAttribute 注解,在页面跳转后自动填充表单数据。主要探讨了两种实现方法及其背后的原理。 ... [详细]
  • 本文介绍了一种使用链剖分(Link-Cut Tree, LCT)来维护动态树结构的方法,特别是如何通过 LCT 来高效地管理子树的信息,如子树大小等。 ... [详细]
  • Java连接MySQL数据库的方法及测试示例
    本文详细介绍了如何安装MySQL数据库,并通过Java编程语言实现与MySQL数据库的连接,包括环境搭建、数据库创建以及简单的查询操作。 ... [详细]
  • 个人博客:打开链接依赖倒置原则定义依赖倒置原则(DependenceInversionPrinciple,DIP)定义如下:Highlevelmo ... [详细]
  • iOS如何实现手势
    这篇文章主要为大家展示了“iOS如何实现手势”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“iOS ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • egg实现登录鉴权(七):权限管理
    权限管理包含三部分:访问页面的权限,操作功能的权限和获取数据权限。页面权限:登录用户所属角色的可访问页面的权限功能权限:登录用户所属角色的可访问页面的操作权限数据权限:登录用户所属 ... [详细]
author-avatar
鬼鬼太子_157
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有