网络流模板题
来源:互联网 发布:c语言初学者看什么书 编辑:程序博客网 时间:2024/05/16 12:16
网络流
- 网络流
- HihoCoder1369
- 题意
- 代码
- HihoCoder1369
HihoCoder【1369】
题意:
就是很模板的模板题,让你求一下最大流。
代码:
#include<bits/stdc++.h> using namespace std;const int maxn = 505;const int INF = 0x7fffffff;struct Edge { int from, to, cap, flow; Edge(int u, int v, int c, int f) : from(u), to(v), cap(c), flow(f) {}};struct EdmondsKarp { int n, m; vector<Edge> edges;//边数的两倍 vector<int> G[maxn];//G[i][j]表示节点i的第j条边在edges中的编号 int a[maxn];//当起点到i的可改进量 int p[maxn];//最短路上p的入弧编号 void init(int n) { for (int i = 0; i < n; ++i) G[i].clear(); edges.clear(); } void AddEdge(int from, int to, int cap) { edges.push_back(Edge(from, to, cap, 0)); edges.push_back(Edge(to, from, 0, 0)); m = edges.size(); G[from].push_back(m - 2); G[to].push_back(m - 1); } int Maxflow(int s, int t) { int flow = 0; for (;;) { memset(a, 0, sizeof(a)); queue<int> Q; Q.push(s); a[s] = INF; while (!Q.empty()) { int x = Q.front(); Q.pop(); for (int i = 0; i < G[x].size(); ++i) { Edge &e = edges[G[x][i]]; if (!a[e.to] && e.cap > e.flow) { p[e.to] = G[x][i]; a[e.to] = min(a[x], e.cap - e.flow); Q.push(e.to); } } if (a[t]) break; } if (!a[t]) break; for (int u = t; u != s; u = edges[p[u]].from) { edges[p[u]].flow += a[t]; edges[p[u] ^ 1].flow -= a[t]; } flow += a[t]; } return flow; }};int main(){ int N, M, u, v, c; cin >> N >> M; EdmondsKarp ek; ek.init(N); for (int i = 0; i < M; ++i) { cin >> u >> v >> c; ek.AddEdge(u, v, c); } cout << ek.Maxflow(1, N) << endl; return 0;}
阅读全文
0 0
- 网络流模板题
- 网络流模板(模板题:POJ1273)
- POJ1459网络流模板题
- 【模板】ISAP网络最大流 (模板题:洛谷P3376)
- POJ_P1273 Drainage Ditches(模板题+网络流)
- USACO4.2 网络流模板题
- hdu 3549 网络流 模板题
- 【网络流各种模板】
- 【模板】网络流
- 网络流模板--dinic
- 网络流模板--edmondsKarp
- 网络流模板--spfa
- 网络流(模板)
- 网络流算法模板
- 网络流模板
- 网络流模板
- 网络流基础模板
- 网络流SAP模板
- ABAP表抛FTP通用程序
- 人工智障学习笔记——机器学习(11)PCA降维
- android 自定义相机返回图片URL,高清
- Error while building/deploying project
- Vuejs实践--v-model
- 网络流模板题
- 日期函数
- centos系统中挂载盘和扩容硬盘的方法
- C# 类的索引器
- .Net网站架构设计(七)网络安全
- FZU2150-Fire Game
- 隐式Intent实现Activity跳转
- 图论作业
- 页面刷新的时候记住滚动条的位置