网络流一直没学,来学一波网络流。

https://vjudge.net/problem/POJ-1273

题意:给定点数,边数,源点,汇点,每条边容量,求最大流。

解法:EK或dinic。

EK:每次增广用bfs选择一条从源到汇具有最少边数的增广路径,然后找出该路径容量最小的边,就是此次增加的流量,然后沿该路径增加反向边,同时修改每条边的容量,重复上述过程直到找不到增广路(即minFlow = 0)为止。

dinic: 每次bfs从源点到汇点分层(层数是源点到它最少要经过的边数),然后dfs从源点开始不断向下一层找增广路,碰到汇点说明找到一条,进行增广。然后回溯到点u(u是满足(u,v)容量为0的最上层节点)继续寻找增广路,如果回溯到源点且无法继续往下走dfs结束,然后对残余网络再分层,再dfs直到无法分层,算法结束。

 #include<iostream>
#include<queue>
#include<cstring>
using namespace std;
int G[][];
int pre[]; //前驱
bool vis[];
int n,m; //1是源,m是汇 inline int solve(){
deque<int> q;
memset(pre,,sizeof pre);
memset(vis,,sizeof vis);
pre[] = ;
vis[] = ;
q.push_back();
bool find = false;
while(!q.empty()){
int v = q.front();
q.pop_front();
for(int i=;i<=m;i++){
if(G[v][i]>&&vis[i]==){
pre[i] = v;
vis[i] = ;
if(i==m){
find = true;
q.clear();
break;
}
else q.push_back(i);
}
}
}
if(!find) return ;
int minFlow = 0x3f3f3f3f;
int v = m;
while(pre[v]){
minFlow = min(minFlow,G[pre[v]][v]);
v = pre[v];
}
v = m;
while(pre[v]){
G[pre[v]][v] -= minFlow;
G[v][pre[v]] += minFlow;
v = pre[v];
}
return minFlow;
} int main(){
while(cin>>n>>m){
memset(G,,sizeof G);
for(int i=;i<n;i++){
int s,e,c;
cin>>s>>e>>c;
G[s][e] += c;
}
int maxFlow = ;
int aug;
while(aug=solve())
maxFlow += aug;
cout<<maxFlow<<endl;
}
return ;
}
 #include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int inf = 0x3f3f3f3f;
int G[][];
bool vis[];
int Layer[];
int n,m; //1是源点,m是汇点 inline bool countLayer(){
int layer = ;
deque<int> q;
memset(Layer,0xff,sizeof Layer);
Layer[] = ;
q.push_back();
while(!q.empty()){
int v = q.front();
q.pop_front();
for(int j=;j<=m;j++){
if(G[v][j]>&&Layer[j]==-){
Layer[j] = Layer[v]+;
if(j==m) return true;
else q.push_back(j);
}
}
}
return false;
} inline int dinic(){
int maxFlow = ;
deque<int> q;
while(countLayer()){
q.push_back();
memset(vis,,sizeof vis);
vis[] = ;
while(!q.empty()){
int nd = q.back();
if(nd==m){
int minc = inf;
int minc_vs;
for(int i=;i<q.size();i++){
int vs = q[i-];
int ve = q[i];
if(G[vs][ve]>){
if(minc>G[vs][ve]){
minc = G[vs][ve];
minc_vs = vs;
}
}
}
maxFlow += minc;
for(int i=;i<q.size();i++){
int vs = q[i-];
int ve = q[i];
G[vs][ve] -= minc;
G[ve][vs] += minc;
}
while(!q.empty()&&q.back()!=minc_vs){
vis[q.back()] = ;
q.pop_back();
}
}
else {
int i;
for(i=;i<=m;i++){
if(G[nd][i]>&&Layer[i]==Layer[nd]+&&!vis[i]){
vis[i] = ;
q.push_back(i);
break;
}
}
if(i>m) q.pop_back();
}
}
}
return maxFlow;
} int main(){
while(cin>>n>>m){
memset(G,,sizeof G);
for(int i=;i<n;i++){
int s,e,c;
cin>>s>>e>>c;
G[s][e] += c;
}
cout<<dinic()<<endl;
}
return ;
}

poj1273 Drainage Ditches (最大流板子的更多相关文章

  1. poj-1273 Drainage Ditches(最大流基础题)

    题目链接: Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 67475   Accepted ...

  2. POJ-1273 Drainage Ditches 最大流Dinic

    Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 65146 Accepted: 25112 De ...

  3. POJ1273:Drainage Ditches(最大流入门 EK,dinic算法)

    http://poj.org/problem?id=1273 Description Every time it rains on Farmer John's fields, a pond forms ...

  4. [poj1273]Drainage Ditches(最大流)

    解题关键:最大流裸题 #include<cstdio> #include<cstring> #include<algorithm> #include<cstd ...

  5. poj1273 Drainage Ditches Dinic最大流

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 76000   Accepted: 2953 ...

  6. Poj 1273 Drainage Ditches(最大流 Edmonds-Karp )

    题目链接:poj1273 Drainage Ditches 呜呜,今天自学网络流,看了EK算法,学的晕晕的,留个简单模板题来作纪念... #include<cstdio> #include ...

  7. 2018.07.06 POJ1273 Drainage Ditches(最大流)

    Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Description Every time it rains on Farmer J ...

  8. poj1273 Drainage Ditches

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 68414   Accepted: 2648 ...

  9. poj 1273 Drainage Ditches 最大流入门题

    题目链接:http://poj.org/problem?id=1273 Every time it rains on Farmer John's fields, a pond forms over B ...

随机推荐

  1. python 爬取豆瓣电影评论,并进行词云展示及出现的问题解决办法

    本文旨在提供爬取豆瓣电影<我不是药神>评论和词云展示的代码样例 1.分析URL 2.爬取前10页评论 3.进行词云展示 1.分析URL 我不是药神 短评 第一页url https://mo ...

  2. 制造资源计划(Manufacturing Resource Planning,Mrp II)

        制造资源计划(Manufacturing Resource Planning,Mrp II)       概括: 以物料需求计划(MRP)为核心的企业生产管理计划系统,MRP II 是以工业工 ...

  3. 利用hash或history实现单页面路由

    目录 html代码 css代码 JavaScript代码 hash方式 history 方式 浏览器端代码 服务器端 在chrome(版本 70.0.3538.110)测试正常 编写涉及:css, h ...

  4. Postman系列二:Postman中get接口实战讲解(接口测试介绍,接口测试流程,头域操作)

    一:接口测试介绍 接口测试:就是针对软件对外提供服务的接口输入输出进行测试,以及接口间相互逻辑的测试,验证接口功能和接口描述文档的一致性. 接口测试好处:接口测试通常能对系统测试的更为彻底,更高的保障 ...

  5. CodeForces 29D Ant on the Tree

    洛谷题目页面传送门 & CodeForces题目页面传送门 题意见洛谷里的翻译. 这题有\(\bm3\)种解法,但只有一种是正解(这不是废话嘛). 方法\(\bm1\):最近公共祖先LCA(正 ...

  6. CentOS7.x 搭建 GitLab 教程

    今天闲来无事,想起之前买了一个阿里云 ECS,一直闲置着没用,一时兴起就想搭个自己的 GitLab 玩玩,GitLab 官网也提供了安装教程,很简单,照着步骤一步步基本没什么问题,可能安装的过程中有一 ...

  7. Jenkins持续集成项目搭建——基于Python Selenium自动化测试

    参考链接:https://www.liaoxuefeng.com/article/1083282007018592 第一步:去官网https://jenkins.io/下载最新的war包 第二步:安装 ...

  8. mysql主从不同步处理过程分享

    背景  8月7日15:58收到报障数据库出现不同步:数据库共四台,分别为10.255.70.11,10.255.70.12,10.255.70.13,10.255.70.14(ip为虚拟ip) 数据库 ...

  9. Unity进阶之ET网络游戏开发框架 01-下载、运行

    版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...

  10. Tomcat 方式部署 Solo 博客系统总结

      此篇为Tomcat部署方式,另有Docker部署方式,请参考文章<Docker 方式部署 Solo 博客系统总结> 一.环境和文件准备 服务器:购买的阿里云服务器,系统为Linux(C ...