网络流--最大流dinic模板
标准的大白书式模板,除了变量名并不一样……在主函数中只需要用到 init 函数、add 函数以及 mf 函数
- #include<stdio.h> //差不多要加这么些头文件
- #include<string.h>
- #include<queue>
- #include<vector>
- #include<algorithm>
- using namespace std;
- const int maxm=+; //点的总数
- const int INF=0x3f3f3f3f;
- struct edge{ //弧的结构体,变量:弧的出发点、结束点、容量、流量
- int from,to,c,f;
- edge(int a,int b,int m,int n):from(a),to(b),c(m),f(n){}
- };
- struct dinic{
- int m,s,t; //边数、源点标号、汇点标号
- vector<edge>e; //边
- vector<int>g[maxm]; //g[i][j]表示第i个点出发的第j条边在e中的编号
- bool vis[maxm];
- int d[maxm],cur[maxm]; //d为源点到点的距离,cur为当前遍历到的边
- void init(int n){ //初始化,n为点数量(标号0~n-1)
- for(int i=;i<n+;i++)g[i].clear();
- e.clear();
- }
- void add(int a,int b,int v){ //加入弧和反向弧
- e.push_back(edge(a,b,v,)); //正向弧容量v,反向弧容量0
- e.push_back(edge(b,a,,));
- m=e.size();
- g[a].push_back(m-);
- g[b].push_back(m-);
- }
- bool bfs(){
- memset(vis,,sizeof(vis));
- queue<int>q;
- q.push(s);
- d[s]=;
- vis[s]=;
- while(!q.empty()){
- int u=q.front();q.pop();
- for(int i=;i<g[u].size();i++){
- edge tmp=e[g[u][i]];
- if(!vis[tmp.to]&&tmp.c>tmp.f){
- vis[tmp.to]=;
- d[tmp.to]=d[u]+;
- q.push(tmp.to);
- }
- }
- }
- return vis[t];
- }
- int dfs(int x,int a){
- if(x==t||a==)return a;
- int flow=,f;
- for(int& i=cur[x];i<g[x].size();i++){
- edge &tmp=e[g[x][i]];
- if(d[x]+==d[tmp.to]&&(f=dfs(tmp.to,min(a,tmp.c-tmp.f)))>){
- tmp.f+=f;
- e[g[x][i]^].f-=f;
- flow+=f;
- a-=f;
- if(a==)break;
- }
- }
- if(!flow)d[x]=-;
- return flow;
- }
- int mf(int s,int t){ //在主函数中使用的函数,求s到t的最大流
- this->s=s;
- this->t=t;
- int flow=;
- while(bfs()){
- memset(cur,,sizeof(cur));
- flow+=dfs(s,INF);
- }
- return flow;
- }
- };
网络流--最大流dinic模板的更多相关文章
- 网络流-最大流 Dinic模板
#include <bits/stdc++.h> using namespace std; #define MP make_pair #define PB push_back #defin ...
- 网络流--最大流--Dinic模板矩阵版(当前弧优化+非当前弧优化)
//非当前弧优化版 #include <iostream> #include <cstdio> #include <math.h> #include <cst ...
- [讲解]网络流最大流dinic算法
网络流最大流算法dinic ps:本文章不适合萌新,我写这个主要是为了复习一些细节,概念介绍比较模糊,建议多刷题去理解 例题:codevs草地排水,方格取数 [抒情一下] 虽然老师说这个多半不考,但是 ...
- 【模板】网络流-最大流 Dinic
洛谷 3376 #include<cstdio> #include<algorithm> #include<cstring> #define N 10010 #de ...
- 网络流最大流——dinic算法
前言 网络流问题是一个很深奥的问题,对应也有许多很优秀的算法.但是本文只会讲述dinic算法 最近写了好多网络流的题目,想想看还是写一篇来总结一下网络流和dinic算法以免以后自己忘了... 网络流问 ...
- Power Network(网络流最大流 & dinic算法 + 优化)
Power Network Time Limit: 2000MS Memory Limit: 32768K Total Submissions: 24019 Accepted: 12540 D ...
- POJ训练计划1459_Power Network(网络流最大流/Dinic)
解题报告 这题建模实在是好建.,,好贱.., 给前向星给跪了,纯dinic的前向星居然TLE,sad.,,回头看看优化,.. 矩阵跑过了.2A,sad,,, /******************** ...
- 最大流dinic模板
循环版,点的编号从0开始: ; ; const int INF = 0x3f3f3f3f; struct Edge { int to, next, cap, flow; }edge[MAXM]; in ...
- (网络流 最大流 Dinic || SAP)Control -- hdu --4289
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4289 http://acm.hust.edu.cn/vjudge/contest/view.action ...
随机推荐
- Unity搭建简单的图片服务器
具体要实现的目标是:将图片手动拷贝到服务器,然后在Unity中点击按钮将服务器中的图片加载到Unity中. 首先简答解释下 WAMP(Windows + Apache + Mysql + PHP),一 ...
- LINQ 系列
C#图解教程 第十九章 LINQ LINQ 什么是LINQLINQ提供程序 匿名类型 方法语法和查询语法查询变量查询表达式的结构 from子句join子句什么是联结查询主体中的from…let…w ...
- SGE:qsub/qstat/qdel/qhost 任务投递和监控
参考: Oracle Grid Engine qsub命令 SGE - qsub使用范例 SGE作业基本用法 qsub是最为稳定的底层任务投递系统,就是把一个脚本投递到集群的计算节点上运行. 注意,只 ...
- codeforces 568a//Primes or Palindromes?// Codeforces Round #315 (Div. 1)
题意:求使pi(n)*q<=rub(n)*p成立的最大的n. 先收集所有的质数和回文数.质数好搜集.回文数奇回文就0-9的数字,然后在头尾添加一个数.在x前后加a,就是x*10+a+a*pow( ...
- java final修饰变量时的一种情况
有如下一种场景. 1.在文件PaymentConfig.java中存在如下变量public static final desc="描述" 2.类Test.java中使用了desc变 ...
- JavaScript的深拷贝和浅拷贝总结
深拷贝和浅拷贝 深拷贝:拷贝实例:浅拷贝:拷贝引用(原对象). 说深拷贝和浅拷贝之前,我先去了解了下高程书上的JavaScript的变量类型: 基本类型:undefined.null.Boolean. ...
- poj2417 Discrete Logging BSGS裸题
给a^x == b (mod c)求满足的最小正整数x, 用BSGS求,令m=ceil(sqrt(m)),x=im-j,那么a^(im)=ba^j%p;, 我们先枚举j求出所有的ba^j%p,1< ...
- ASP.NET的路由系统
一.URL与物理文件的分离 1.URL与物理文件的分离 对于一个 ASP.NET Web Form应用来说,任何一个请求都对应着某个具体的物理文件.部署在Web服务器上的物理文件可以是静态的(比如图片 ...
- Microsoft Office相关开发组件
安装office,直接引用COM控件 C#4提供对PIA引用的一种方式:链接(编译器只会将PIA中需要的部分直接嵌入到程序集中),变体(variant)被视为动态类型,以减少强制转换需要的开销: 不安 ...
- 如何搭建.NET Entity Framework分布式应用系统框架
一. 前言 ADO.NET Entity Framework(以下简称EF)是微软推出的一套O/RM框架,如果用过Linq To SQL的人会比较容易理解,因为Linq To ...