UESTC 1143 数据传输 网络流 最大流 Dinic
2017-06-22 17:40
225 查看
数据传输
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
Submit
Status
机房里面有m台电脑,n台网线,每条网线都每秒中最多传送的数据量,如今须要你计算从标号为1的电脑传送数据到编号为m的电脑,问一秒内
最多传送多少数据?
Input
第1行: 两个用空格分开的整数N(0≤N≤200)和 M(2≤M≤200)。N网线的数量,M是电脑的数量。第二行到第N+1行:
每行有三个整数,Si。Ei 和 Ci。
Si 和 Ei (1≤Si,Ei≤M) 指明电脑编号。数据从 Si流向 Ei。
Ci(0≤Ci≤10,000,000)
是这条网线的最大容量。
Output
输出一个整数。即排水的最大流量。
Sample input and output
Sample Input | Sample Output |
---|---|
5 4 1 2 40 1 4 20 2 4 20 2 3 30 3 4 10 | 50 |
Source
2015 UESTC Training for Graph TheoryThe question is from here.
My Solution
最大流的Dinic算法 O(N^2 *M) N vertices and M edges#include <iostream> #include <cstdio> #include <cstring> #include <queue> using namespace std; const int inf = 1000000000; const int maxn = 200, maxm = 200; //the max number of vertices and edges struct Edge { int v, f, nxt; }; int n, src, sink; int g[maxn+8]; int nume; Edge e[maxm*2+8]; void addedge(int u, int v, int c) { e[++nume].v = v; e[nume].f = c; e[nume].nxt = g[u]; g[u] = nume; e[++nume].v = u; e[nume].f = 0; e[nume].nxt = g[v]; g[v] = nume; } void init() { memset(g, 0, sizeof(g)); nume = 1; } queue<int> que; bool vis[maxn+8]; int dist[maxn+8]; //distance void bfs() { memset(dist, 0, sizeof(dist)); while(!que.empty()) que.pop(); vis[src] = true; que.push(src); while(!que.empty()){ int u = que.front(); que.pop(); for(int i = g[u]; i; i = e[i].nxt) { if(e[i].f && !vis[e[i].v]) { que.push(e[i].v); dist[e[i].v] = dist[u] + 1; vis[e[i].v] = true; } } } } int dfs(int u, int delta) { if(u == sink){ return delta; } else{ int ret = 0; for(int i = g[u]; delta && i; i = e[i].nxt) { if(e[i].f && dist[e[i].v] == dist[u] + 1) { int dd = dfs(e[i].v, min(e[i].f, delta)); e[i].f -= dd; e[i^1].f += dd; delta -= dd; ret += dd; } } return ret; } } int maxflow() { int ret = 0; while(true) { memset(vis, 0, sizeof(vis)); bfs(); if(!vis[sink]) return ret; ret += dfs(src, inf); } } int main() { int N, M, S, E, C; scanf("%d%d", &N, &M); src = 1;sink = M; while(N--){ scanf("%d%d%d", &S, &E, &C); addedge(S, E, C); } printf("%d", maxflow()); return 0; }
Thank you!
相关文章推荐
- UESTC 1143 传输数据 网络流 最大流 Dinic
- CDOJ 1143 传输数据 最大流
- cdoj 1143 传输数据 最大流
- hdu 1532 网络流-最大流 DINIC
- poj 1459 Power Network(网络流 最大流 dinic模板题)
- Android BLE中传输数据的最大长度怎么破
- 【网络流-最大流-Dinic-建模】POJ3281 Dining:Pascal 解法
- 【BZOJ1143】【CTSC2008】祭祀river 传递闭包、最大点独立集(网络流写的)
- 最大网络流(Dinic)
- 关于MySQL允许最大传输数据
- 初谈网络流(最大流)..Edmonds_Karp..Dinic
- 客户端C和服务器S之间建立一个TCP连接,该连接总是以1KB的最大段长发送TCP段,客户端C有足够的数据要发送。当拥塞窗口为16KB的时候发生超时,如果接下来的4个RTT往返时间内的TCP段的传输是成
- [caioj 1115] 网络流入门1 --- dinic最大流
- 如何在ADO.NET Data Service的解决方案中修改最大传输数据量
- hdu 4292 Food 【图论-网络流-最大流-Dinic】
- hdu 3416 Marriage Match IV 【图论-网络流-最短路+最大流(spfa + Dinic)】
- WCF代码设置最大传输数据
- 初谈网络流(最大流)..Edmonds_Karp..Dinic
- 【网络流】【Dinic】【最大流】bzoj3396 [Usaco2009 Jan]Total flow 水流
- hiho一下 第119周 #1398 : 网络流五·最大权闭合子图 【最小割-最大流--Ford-Fulkerson 与 Dinic 算法】