网络流最大流Dinic算法(模板)_SingleK的博客-程序员秘密

技术标签: 图论-----------网络流  模板  

最大流算法的Edmonds-Karp算法,Maxflow返回最大流的值

#include<bits/stdc++.h>
using namespace std;
const int inf=2e9;
const int maxn=1005;

struct Edge{
    int from,to,cap,flow;
    Edge(int u,int v,int c,int f):from(u),to(v),cap(c),flow(f){}
};

struct Dinic{
    int n,m,s,t;
    vector<Edge> edges;
    vector<int> g[maxn];
    bool vis[maxn];
    int d[maxn];
    int cur[maxn];

    void init(int n){
        this->n=n;
        for(int i=0;i<=n;i++) g[i].clear();
        edges.clear();
    }

    void add(int from,int to,int cap){
        edges.push_back(Edge(from,to,cap,0));
        edges.push_back(Edge(to,from,0,0));
        m=edges.size();
        g[from].push_back(m-2);
        g[to].push_back(m-1);
    }

    bool BFS(){
        memset(vis,0,sizeof(vis));
        queue<int> que;
        que.push(s);
        d[s]=0;
        vis[s]=1;
        while(!que.empty()){
            int x=que.front();que.pop();
            for(int i=0;i<g[x].size();++i){
                Edge& e=edges[g[x][i]];
                if(!vis[e.to] && e.cap>e.flow){
                    vis[e.to]=1;
                    d[e.to]=d[x]+1;
                    que.push(e.to);
                }
            }
        }
        return vis[t];
    }

    int DFS(int x,int a){
        if(x==t || a==0) return a;
        int flow=0,f;
        for(int& i=cur[x];i<g[x].size();++i){
            Edge& e=edges[g[x][i]];
            if(d[x]+1==d[e.to] && (f=DFS(e.to,min(a,e.cap-e.flow)))>0){
                e.flow+=f;
                edges[g[x][i]^1].flow-=f;
                flow+=f;
                a-=f;
                if(a==0) break;
            }
        }
        return flow;
    }

    int Maxflow(int s,int t){
        this->s=s;this->t=t;
        int flow=0;
        while(BFS()){
            memset(cur,0,sizeof(cur));
            flow+=DFS(s,inf);
        }
        return flow;
    }
};
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiao_k666/article/details/81269912

智能推荐

Android视频播放器横竖屏切换时遇到的问题记录__小记杂七杂八的博客-程序员秘密

我用的播放器是KMedia,一个开源的播放器,链接如下https://github.com/BlackQi/KMedia我个人觉得还是很好用的,支持定制。现在遇到一个问题就是播放时横屏铺满全屏视频被拉伸的问题(我们的视频比例为16:9 也就是1.778:1)。由于该播放器没有提供屏幕比例调整的api,所以就只能自己搞了。思路,原本是想直接一刀切:横屏时把window的尺寸调整一下,那window所包含的内容不就直接改了吗 也不用过多的调整UI,而且好用的一点是window调整之后会以屏幕居中,就

java的io流以及文件复制的实现_马马也的博客-程序员秘密

一.java的io流java为了实现一个好的输入输出系统提供了大量的类,这些类都被封装到了java的io包中,我们可以通过import java.io.*进行引入.在讲java的io流之前必须要明白java的File类,该类叫文件类,该类的可以理解为将一个实体文件封装成为了一个文件对象,从而可以通过调用相关的属性和方法对文件进行操作.将一个文件封装为一个File对象的代码如下:imp...

基于纯HTML5+CSS3的一个后台或者前台布局_纯html5 后台_老虎打猫咪的博客-程序员秘密

前言:本实例基于纯html和css3,不需要任何插件,可以作为新手参考!第一部分1.0 主要实现了:点击菜单改变颜色、下拉选择菜单、div选项卡、div相对布局等话不多说,先上图:图一:图二:1.1 代码部分1.11 HTML部分(Index.html)&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;html&amp;gt; &amp;lt;head&amp;gt; ...

安卓学习笔记-控件-EditTextView_android edittextview_紧张的无痕的博客-程序员秘密

内容代码&lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layou

python爬虫之爬取百度图片(图文并排,炒鸡详细!!!)_爬取图片_SlienceAccept的博客-程序员秘密

第一步:登录百度图片官网,截图如下所示:注意点一:开头必须是https(如上图所示,出现锁的标志),不能是http,否则后期下载图片文件会出错第二步:输入关键字,页面加载出来之后,按F12进入开发者模式,由于百度图片ajax动态加载,点击network选项卡,重新刷新页面,查看XHR数据,截图如下所示:第三步:分析多个XHR,得出规律,每一个页面所请求的url所携带的参数只有pn,rn,...

【重磅推荐】Pycharm2020.1安装中文语言插件教程,不需要汉化_weixin_43343144的博客-程序员秘密

参考:https://blog.csdn.net/qq_42825420/article/details/105690039官方汉化包:https://ximoqing.lanzous.com/i90zTdv3d8d

随便推点

error: C2664: 不能将参数从“const char *”转换为“LPCWSTR” 的解决办法_c2664: “getfileattributesw”: 不能将参数 1 从“const char _liyuanbhu的博客-程序员秘密

开发环境:Qt 5.4.1 + VS2010在我的项目中用到了一个第三方的库。编译时报错:C2664: “LoadLibraryW”: 不能将参数 1 从“const char *”转换为“LPCWSTR”  解决办法,在报错的 C 文件的开头加上:#undef UNICODE

Objective-C 基础语法详解_Blocksom的博客-程序员秘密

【10】Objective-C 基础语法详解Objective-C语法之第一个iPhone应用程序获取手机屏幕尺寸的方法//得到屏幕的宽和高CGRect rect=[[UIScreen mainScreen] bounds];CGSize size = rect.size;int screenWidth = size.width;int screen

谁是华为扫地僧?_NicolasLearner的博客-程序员秘密

是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋气的Brunch(早午餐),并和他们面对面,围绕某个课题探讨技术。别看扫地僧这个名字很接地气,他们的真实身份大多是博士、Fellow和教授,都是来自华为各领域最顶尖、最优秀的技术专家。构建一云两翼双引擎+开放的生态在1月8日的华为开发者大会2020(Cloud)媒体预沟通会...

模糊的图片怎么变清晰?分享两种好用的修复方法_技能知识库的博客-程序员秘密

怎么把模糊的图片修复清晰呢?当大家拍摄照片时,如果你不小心晃动了相机,或者你的相机不够稳定,那么你的照片可能会模糊不清。此外,如果你的镜头没有清洁干净,或者你的光线不足,照片也可能会变得模糊。快门速度过慢也可能导致照片模糊,因为它允许相机在拍摄时保持开放状态的时间太长。我们想要修复模糊的图片应该怎么做呢?给大家分享两种简单好用的修复方法,一起来看看吧。方法一:智能修复老照片第一种方法是使用一个专业的图片修复工具,它可以有效地恢复老照片的质量,让模糊的图像变得清晰。这个功能的优点在于:节省时间和精力无需专业技

C++头文件<bits/stdc++.h>详解_最萌皮卡丘的博客-程序员秘密

你知道C++头文件是什么吗?快来看看吧!

python生成一组1024与512位数的大素数对_DT233的博客-程序员秘密

python生成一组二进制1024位和512位数的大质数对前些天同学求助: 用python生成一组二进制1024位与512位数的大素数对,要求1024位的质数减一后可以整除512位数,经过两天鏖战后成功,在这里总结一下思路与代码。一. 生成大素数解决这个问题首先需要生成大素数,一个二进制的1024位数大概相当于300位十进制位数,运用穷举法最多可能跑到1亿(9位十进制数)这种单位,...

推荐文章

热门文章

相关标签