参考:

https://blog.csdn.net/txl199106/article/details/64441994

分析:

该算法是用bfs求出是否有路从s到t, 然后建立反向边(关于反向边), 最终求出答案, 复杂度(mn)

#include<bits/stdc++.h>
using namespace std;
const int MAXN = + ;
const int MAXM = + ;
const int MAX_INT = ( << ); struct Edge {
int v, nxt, w;
}; struct Node {
int v, id;
}; int n, m, ecnt, S , T; // n , m , S , T 点,边,源点,汇点
bool vis[MAXN];
int head[MAXN];
Node pre[MAXN];
Edge edge[ * MAXM]; void init() {
ecnt = ;
memset(edge, , sizeof(edge));
memset(head, -, sizeof(head));
} void addEdge(int u, int v, int w) {
edge[ecnt].v = v;
edge[ecnt].w = w;
edge[ecnt].nxt = head[u];
head[u] = ecnt++;
} bool bfs(int s, int t) {
queue <int> que;
memset(vis, , sizeof(vis));
memset(pre, -, sizeof(pre));
pre[s].v = s;
vis[s] = true;
que.push(s);
while(!que.empty()) {
int u = que.front();
que.pop();
for(int i = head[u]; i + ; i = edge[i].nxt) {
int v = edge[i].v;
if(!vis[v] && edge[i].w) {
pre[v].v = u;
pre[v].id = i;
vis[v] = true;
if(v == t)
return true;
que.push(v);
}
}
}
return false;
} int EK(int s, int t) {
int ans = ;
while(bfs(s, t)) {
int mi = MAX_INT;
for(int i = t; i != s; i = pre[i].v) {
mi = min(mi, edge[pre[i].id].w);
}
for(int i = t; i != s; i = pre[i].v) {
edge[pre[i].id].w -= mi;
edge[pre[i].id ^ ].w += mi; //异或1的用处是 偶数+1, 奇数-1 (两条正反向边是相邻的
}
ans += mi;
}
return ans;
} int main() {
freopen("1.txt","r", stdin);
init();
ios::sync_with_stdio(false);
cin >> n >> m >> S >> T;
for(int i = ; i < m; i++) {
int u, v, w;
cin >> u >> v >> w;
addEdge(u, v, w);
addEdge(v, u, );
}
// 调用
cout << EK(S, T) << "\n";
}
// 加边

最新文章

  1. sql rank()函数
  2. TOAD和PLSQL 默认日期显示、rowid显示、TNSNAME的修改
  3. setInterval()与clearInterval()的一个有趣小现象
  4. 「Unity」与iOS、Android平台的整合:2、导出的Android-Eclipse工程
  5. 2034-人见人爱A-B(c++实现)
  6. JSON语法简介 介绍 json
  7. webKit和chromium的文章地址
  8. Linux命令(15)查看系统版本信息
  9. hdu 1124 Factorial(数论)
  10. MyBatis之七:使用generator工具
  11. JavaScript重复元素处理
  12. 3000本IT书籍下载地址
  13. MySQL中的联合索引学习教程
  14. awk解决实际问题例子
  15. hdu5860 Death Sequence
  16. Android工程化开发这门学科的看法
  17. Leetcode_83_Remove Duplicates from Sorted List
  18. js获取浏览器窗体最大化事件
  19. Ambari集群移动现有复制到另外地方或更改ip地址,导致各项服务组件上为黄色问号代表心跳丢失的解决方案(图文详解)(博主推荐)
  20. 【转录】原来Github上的README.md文件这么有意思——Markdown语言详解

热门文章

  1. TCP常用方法
  2. jquery测试解析
  3. Redis的下载安装
  4. SpringBoot整合国际化I18n
  5. 解决java.lang.NoClassDefFoundError: javax/xml/rpc/service错误的方法
  6. iOS Block的本质(二)
  7. MySQL分表操作的例子
  8. 精仿百思不得姐客户端应用iOS源码
  9. ubuntu 14.04 构建openstack使用的ubunt 16 的桌面版的使用镜像
  10. (转)MyBatis框架的学习(一)——MyBatis介绍