CDOJ 1143 传输数据
来源:互联网 发布:虚拟机mac打开本地 编辑:程序博客网 时间:2024/06/08 03:22
最大流
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <string>#include <fstream>#include <list>#include <stack>#include <queue>#include <deque>#include <algorithm>#include <map>#include <set>#include <vector>using namespace std;//ISAP+bfs 初始化+栈优化#define maxn 205//点数的最大值#define maxm 410//边数的最大值#define INF 0x3f3f3f3fstruct Edge{int to, next, cap, flow;}edge[maxm];//注意是maxmint tol;int head[maxn];int gap[maxn], dep[maxn], cur[maxn];void init(){tol = 0;memset(head, -1, sizeof(head));}void addedge(int u, int v, int w, int rw = 0){edge[tol].to = v; edge[tol].cap = w; edge[tol].flow = 0;edge[tol].next = head[u]; head[u] = tol++;edge[tol].to = u; edge[tol].cap = rw; edge[tol].flow = 0;edge[tol].next = head[v]; head[v] = tol++;}int Q[maxn];void BFS(int start, int end){memset(dep, -1, sizeof(dep));memset(gap, 0, sizeof(gap));gap[0] = 1;int front = 0, rear = 0;dep[end] = 0;Q[rear++] = end;while (front != rear){int u = Q[front++];for (int i = head[u]; i != -1; i = edge[i].next){int v = edge[i].to;if (dep[v] != -1)continue;Q[rear++] = v;dep[v] = dep[u] + 1;gap[dep[v]]++;}}}int S[maxn];//N是总顶点数,编号[0,N-1]int sap(int start, int end, int N){BFS(start, end);memcpy(cur, head, sizeof(head));int top = 0;int u = start;int ans = 0;while (dep[start] < N){if (u == end){int Min = INF;int inser;for (int i = 0; i < top; i++)if (Min > edge[S[i]].cap - edge[S[i]].flow){Min = edge[S[i]].cap - edge[S[i]].flow;inser = i;}for (int i = 0; i < top; i++){edge[S[i]].flow += Min;edge[S[i] ^ 1].flow -= Min;}ans += Min;top = inser;u = edge[S[top] ^ 1].to;continue;}bool flag = false;int v;for (int i = cur[u]; i != -1; i = edge[i].next){v = edge[i].to;if (edge[i].cap - edge[i].flow && dep[v] + 1 == dep[u]){flag = true;cur[u] = i;break;}}if (flag){S[top++] = cur[u];u = v;continue;}int Min = N;for (int i = head[u]; i != -1; i = edge[i].next)if (edge[i].cap - edge[i].flow && dep[edge[i].to] < Min){Min = dep[edge[i].to];cur[u] = i;}gap[dep[u]]--;if (!gap[dep[u]])return ans;dep[u] = Min + 1;gap[dep[u]]++;if (u != start)u = edge[S[--top] ^ 1].to;}return ans;}int main(){//freopen("input.txt","r",stdin);//freopen("output.txt","w",stdout);//ios::sync_with_stdio(false);//cin.tie(0); cout.tie(0);//ifstream in;//in.open("input.txt", ios::in);int n, m;scanf("%d%d", &m, &n);int s, e, c;init();for (int i = 0; i < m; ++i){scanf("%d%d%d", &s, &e, &c);--s; --e;addedge(s, e, c);}int ans = sap(0, n - 1, n);printf("%d\n", ans);//while (1);return 0;}
0 0
- CDOJ 1143 传输数据
- CDOJ 输出前m大的数据
- SecureCRT传输数据方法
- GzipUtilities传输数据
- 数据描述传输机制
- 数据存储与传输
- 无线传输数据概述
- tcp 数据的传输
- struts2 json 传输数据
- SOCKET传输数据、文件
- navigationController 之间传输数据
- db2数据的传输
- GZip传输数据
- IOS HTTP 传输数据
- 大数据串口传输
- SCP传输数据
- 数据的网络传输
- ajax传输数据案例
- android 按钮点击改变变量数值一次,长按持续改变变量数值
- 【Dongle】【Web】XML总结
- A,B两台机器都正常工作,B机器未监听任何端口.如果A机器向B机器80端口发送SYN包,会收到何种类型的回包?
- <LeetCode> 题44:最小子数组
- android自定义view学习笔记1
- CDOJ 1143 传输数据
- HDU 1686 Oulipo [KMP]
- MergeSort C++实现
- maxlength只对type=“text”和type="password"起作用
- 调用摄像头和相册
- 裸辞
- 星期的研究
- 在jsp页面中不能通过${list.size}取列表长度
- 用 C++ 和 libgd 来绘图