poj1273Drainage Ditches
#include<iostream>
/*
题意:就是寻找从源点到汇点的最大流!
要注意的是每两个点的流量可能有多个,也就是说有重边,所以要把两个点的所有的流量都加起来
就是这两个点之间的流量了! 思路:建图之后直接套用最大流算法(EK, 或者是Dinic算法) 图解Dinic算法流程!
*/
#include<queue>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define INF 0x3f3f3f3f3f3f3f3f
#define N 205
using namespace std;
typedef long long LL;
LL cap[N][N]; int m, n;
LL maxFlow;
int d[N];
queue<int>q; bool bfs(){
q.push();
memset(d, , sizeof(d));
d[]=;
while(!q.empty()){
int u=q.front();
q.pop();
for(int v=; v<=n; ++v)
if(!d[v] && cap[u][v]>){
d[v]=d[u]+;
q.push(v);
}
}
if(!d[n]) return false;
return true;
} LL dfs(int u, LL flow){
if(u==n) return flow;
for(int v=; v<=n; ++v)
if(d[v]==d[u]+ && cap[u][v]>){
LL a=dfs(v, min(flow, cap[u][v]));
if(a==) continue;//如果a==0 说明没有找到从起点到汇点的增广路, 然后换其他路接着寻找!
cap[u][v]-=a;
cap[v][u]+=a;
return a;
}
return ;
} void Dinic(){
LL flow;
while(bfs()){//利用bfs构造好层次图,这样dfs在寻找阻塞流的时候,就不会盲目的寻找了!
while(flow=dfs(, INF)) maxFlow+=flow;//利用构造好的层次图不断的寻找阻塞流!
}
} int main(){
while(scanf("%d%d", &m, &n)!=EOF){
memset(cap, , sizeof(cap));
while(m--){
int u, v;
LL w;
scanf("%d%d%lld", &u, &v, &w);
cap[u][v]+=w;
}
maxFlow=;
Dinic();
printf("%lld\n", maxFlow);
}
return ;
}
//EK算法同样搞定
#include<iostream>
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define INF 0x3f3f3f3f
using namespace std;
typedef __int64 LL;
LL cap[][];
int pre[];
LL a[];
int m, n;
queue<int>q;
LL maxFlow;
bool spfa(){
while(!q.empty()) q.pop();
memset(a, , sizeof(a));
q.push();
a[]=INF;
while(!q.empty()){
int u=q.front();
q.pop();
for(int v=; v<=n; ++v)
if(!a[v] && cap[u][v]>){
pre[v]=u;
a[v]=min(a[u], cap[u][v]);
q.push(v);
}
if(a[n]) break;
}
if(!a[n]) return false;
return true;
} void EK(){
maxFlow=;
while(spfa()){
int u=n;
maxFlow+=a[n];
while(u!=){
cap[pre[u]][u]-=a[n];
cap[u][pre[u]]+=a[n];
u=pre[u];
}
}
}
int main(){
while(scanf("%d%d", &m, &n)!=EOF){
memset(cap, , sizeof(cap));
while(m--){
int u, v;
LL w;
scanf("%d%d%I64d", &u, &v, &w);
cap[u][v]+=w;
}
EK();
printf("%I64d\n", maxFlow);
}
return ;
}
poj1273Drainage Ditches的更多相关文章
- POJ1273Drainage Ditches[最大流]
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 71559 Accepted: 2784 ...
- POJ-1273-Drainage Ditches(网络流之最大流)
Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This ...
- POJ-1273-Drainage Ditches 朴素增广路
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 70588 Accepted: 2743 ...
- 图论-网络流-最大流--POJ1273Drainage Ditches(Dinic)
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 91585 Accepted: 3549 ...
- POJ-1273Drainage Ditches(网络流入门题,最大流)
Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This ...
- poj1273--Drainage Ditches(最大流Edmond-Karp算法 邻接表实现)
最大流模板题 大部分Edmond-Karp算法代码都是邻接矩阵实现,试着改成了邻接表. #include <iostream> #include <cstdio> #inclu ...
- 【最大流Dinic模板】HDU1532&POJ1273-Drainage Ditches(16/3/6更正)
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...
- POJ 1273 Drainage Ditches题解——S.B.S.
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 67823 Accepted: 2620 ...
- I:trainage Ditches
总时间限制: 1000ms 内存限制: 65536kB描述Every time it rains on Farmer John's fields, a pond forms over Bessie's ...
随机推荐
- FLEXNET License管理
之前的程序License管理是我自己手撸的一个非常简单的东东,根据用户机器的MAC地址生成一个字串,程序执行的时候去比较这个字串.当时只是追求一个最简单的实现,像证书过期.功能点证书自然没有.这次新版 ...
- win2003、win7下操作注册表
在win2007里,web程序仅对LOCAL_CURRENT_USER能进行读(写:没有进行测试)操作. 在本地的IIS里运行的web程序,如需访问注册表,需要将对应的应用程序池中的标识里面的用户,改 ...
- DataTables 控件使用和心得 (2) - 参数Options
什么是DataTables参数(Options) 上篇我们说了,DataTables控件的加载函数dataTable()一般都有一个对象参数,这个对象参数就是整个DataTables控件的参数(Opt ...
- kali linux 2016.1 滚动更新源
修改 /etc/apt/sources.list #kali官方源 deb http://http.kali.org/kali kali-rolling main non-free contrib ...
- karma作为jQuery单元测试Runner
karma作为angular测试runner出现,如果你使用过karma一定感受到这很不错的javascript测试runner.简单干净的配置文件karma.config.js,以及karma in ...
- 招聘:有兴趣做一个与Android对等的操作系统么?
招聘:有兴趣做一个与Android对等的操作系统么? 前不久我发了一篇<八一八招聘的那些事儿>讲了我自己作为求职者对招聘的一些看法.那个时候我还在求职,对求职的结果还是挺满意的,五家公司面 ...
- mysql: error while loading shared libraries: libmysqlclient.so.16
[root@host_41 mysql]# mysqlmysql: error while loading shared libraries: libmysqlclient.so.16: cannot ...
- Git学习笔记(8)——标签管理
本文主要记录的Git标签的作用.标签的多种创建方式,以及标签的删除,与推送,和使用GitHub的Fork参与别人的项目. 标签的作用 发布版本时,通常先在版本库中打一个标签,这样,就唯一确定了打标签时 ...
- String的length()和Array的length
String是个final修饰的最终类,不能被继承,String中属性都设置为private,方法为public,并不提供set方法,想要获得字符串的长度必须调用length()方法这个长度是确定的, ...
- Java程序员的日常—— POI与JDBC、Mockmvc与单元测试
周日没怎么休息好,周一一天都迷迷糊糊的,不过还算是干了不少的活. 总结一下,大致有以下几点内容: 1 使用poi以及mysql jdbc实现了一个复杂excel的导入 2 基于工程原有的代码,书写sp ...
