dinic网络流前向星写法
终于照着模板打了一遍前向星……
虽然还不是太懂……
直接上代码吧……依然是poj1273的题
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
#define M 400
int INF=10000001;
using namespace std;struct node
{int u,v,cap,next;
};
node edge[M*M];
int next[M],head[M],d[M],vis[M];
int ecnt;
void init()
{ecnt=0;memset(head,-1,sizeof(head));
}void add(int u,int v,int c)
{edge[ecnt].u=v;edge[ecnt].v = v; edge[ecnt].cap = c; edge[ecnt].next = head[u]; head[u] = ecnt++; edge[ecnt].u = v; edge[ecnt].v = u; edge[ecnt].cap = 0; edge[ecnt].next = head[v]; head[v] = ecnt++;
}
bool bfs(int begin,int end)
{int i,l,h,k,y;for(i=0;i<=end;i++)d[i]=-1;d[begin]=0;queue<int> q;q.push(begin);while(!q.empty()){k=q.front();q.pop();for(i=head[k];i!=-1;i=edge[i].next){y=edge[i].v;if(edge[i].cap>0 && d[y]==-1){d[y]=d[k]+1;if(y==end)return true;q.push(y);}}}return false;
}int dfs(int x,int exp,int end)
{vis[x]=1;if(x==end)return exp;int y,temp,i;for(i=next[x];i!=-1;i=edge[i].next,next[x]=i){ y=edge[i].v;if(edge[i].cap>0 && d[y]==d[x]+1 && vis[y]==0)if(temp=(dfs(y,min(exp,edge[i].cap),end))>0){edge[i].cap-=temp;edge[i^1].cap+=temp;return temp;}}return 0;
}int dinic(int begin,int end)
{
int i,ans=0,flow;
while(bfs(begin,end))
{for(i=0;i<=end;i++)next[i]=head[i];while(true){for(i=0;i<=end;i++)vis[i]=0;flow=dfs(begin,INF,end);if(flow==0)break;ans+=flow;}}return ans;
}int main()
{ int i,n,m;while(~scanf("%d%d",&m,&n)){ init();for(i=1;i<=m;i++){ int u,v,c;scanf("%d%d%d",&u,&v,&c);add(u,v,c);}int sum=dinic(1,n);printf("%d\n",sum);}return 0;}
dinic网络流前向星写法相关推荐
- AcWing 4246. 最短路径和(反向建图+链式前向星+堆优化)
题目连接 https://www.acwing.com/problem/content/description/4249/ http://poj.org/problem?id=1511 思路 其实这道 ...
- 图论部分模板(基于链式前向星的存储方式)
图论篇部分模板(基于链式前向星的存储方式) 你还在为暴力枚举复杂度太高而苦恼吗?你还在为DP而痛苦吗?你还在为搜索剪枝而绞尽脑汁吗?选择链式前向星吧,链式前向星--专注存图20年 . 1. 链式前向星 ...
- 【邻接表存图模板】vector邻接表、数组邻接表、链式前向星
一.目录 一.目录 二.前言 三.邻接表"详解" (一)边的信息 (二)几种邻接表的实现方法"详解" 1.数组邻接表 代码 2.vector邻接表 代码 vec ...
- 二分图最大匹配(匈牙利算法,Dinic网络流算法)
二分图最大匹配 二分图最大匹配问题: 有两个集合A,B,两个集合间有多条边连接集合中的点,且单个集合中的点各不相连,求两集合的点能两两配对的最大匹配数. (参考:)二分图最大匹配--匈牙利算法 匈牙利 ...
- 链式前向星核心代码解析 ← 数组模拟邻接表
[知识点] 在图论算法实现中,常使用C++标准库STL自带的vector来模拟邻接表存图.详见: https://blog.csdn.net/hnjzsyjyj/article/details/101 ...
- Balkan2007]Toponyms[链式前向星建字典树+getchar()读入优化]
思路容易想,卡空间和时间就吐了 用链式前向星压缩空间,用getchar()一位一位读加快读入 #include <iostream> #include <cstdio> #in ...
- HDU 4738 Caocao‘s Bridges(桥、任何位运算一定都要加括号、因为有重边所以用前向星)
HDU 4738 Caocao's Bridges(桥.任何位运算一定都要加括号.因为有重边所以用前向星) Caocao was defeated by Zhuge Liang and Zhou Yu ...
- P3366 【模板】最小生成树(链式前向星,prim,有坑)难度⭐⭐
题目链接 输入: 4 5 1 2 2 1 3 2 1 4 3 2 3 4 3 4 3 输出: 7 链式前向星相比于矩阵,遍历的代码更加复杂一点,但是省空间,这道题用矩阵存就MLE,只能用链式前向星存. ...
- P1155 双栈排序(二分图的染色判断+链式前向星)
P1155 双栈排序 让字典序最小,当然尽量进S1 那什么时候必须进S2呢? a[i]和a[j] 不能压入同一个栈⇔存在一个k,使得i<j<k且a[k]<a[i]<a[j] 因 ...
最新文章
- linux shell 的 for 循环
- 在网站推广的道路中同样的起点,知乎豆瓣却走上了不相交的两条路
- Spring框架使用规范和IOC的开发
- JS判断是否为安卓orIOS
- 计算机项目教学法探讨,项目教学法在计算机教学中应用计算机教学论文计算机论文...
- python打印字符串的前五行_python基础-字符串(6)
- Maven 梳理 - Maven中的dependencyManagement 意义
- java 获取视频时长
- 程序员常见面试逻辑智力题(笔试题)附参考答案
- 数通学习网络协议地图
- 锂电池电源管理系统设计与实现(单片机)
- php架构师培训,php架构师培训效果怎么样
- 如何在WPS文字中插入打勾(叉)方框
- 关键信息基础设施确定指南_干货分享 | 关键信息基础设施运营单位如何做好业务安全测试...
- 力扣-求关注者的数量
- 有什么好的OCR软件可以实现图片转文字
- java socket 打印机_Java使用POS打印机(无驱)
- java读取potx
- python cmd以管理员执行指令(网卡切断与打开)
- 腾讯云服务器入门使用-连接登录