首页 > 其他分享 >最大流模板

最大流模板

时间:2023-08-13 12:12:30浏览次数:29  
标签:最大 int lim ll tot 模板 hd dis

需要注意的是要ll就全ll,不然要出事。

struct Flow
{
    ll tot=1,hd[N],ne[M],to[M],lim[M];
    void Add(int x,int y,ll z)
    {
        ne[++tot]=hd[x];hd[x]=tot;to[tot]=y;lim[tot]=z;
        ne[++tot]=hd[y];hd[y]=tot;to[tot]=x;lim[tot]=0;
    }
    ll T,dis[N],cur[N];
    ll Dfs(ll x,ll res)
    {
        if(x==T)return res;
        ll flow=0;
        for(int i=cur[x];i&&res;i=ne[i])
        {
            cur[x]=i;ll w=min(res,(ll)lim[i]),y=to[i],z;
            if(dis[x]+1==dis[y]&&w)z=Dfs(y,w),flow+=z,res-=z,lim[i]-=z,lim[i^1]+=z;
        }
        if(!flow)dis[x]=-1;
        return flow;
    }
    ll Maxflow(int s,int t)
    {
        T=t;ll flow=0;
        while(1)
        {
            queue<int>q;q.push(s);memcpy(cur,hd,sizeof(hd));
            memset(dis,-1,sizeof(dis));dis[s]=0;
            while(!q.empty())
            {
                int x=q.front();q.pop();
                for(int i=hd[x];i;i=ne[i])if(dis[to[i]]==-1&&lim[i])
                    dis[to[i]]=dis[x]+1,q.push(to[i]);
            }
            if(dis[t]==-1)return flow;
            flow+=Dfs(s,1e18);
        }
    }
}G;
View Code

标签:最大,int,lim,ll,tot,模板,hd,dis
From: https://www.cnblogs.com/Hanghang007/p/17626365.html

相关文章

  • 【专题】中国的技能转型:推动全球规模最大的劳动者队伍成为终身学习者报告PDF合集分享(
    学习能力是将知识资源转化为知识资本的能力。它包括对所学内容的兴趣和热情,有助于更深入理解和掌握知识,提高个人的认知和思维能力。阅读原文,获取专题报告合集全文,解锁文末158份学习教育行业相关报告。教育和娱乐支出越来越成为家庭消费的重要组成部分。这包括对18岁以下儿童的素质......
  • 来自开源社区的最大事件--- IBM收购红帽RHEL后终止提供免费的软件源和操作系统源码
    保持Linux的开放性和自由性--我们不能不这样做作者:首席企业架构师EdwardScreven和OracleLinux开发主管WimCoekaerts-2023年7月10日甲骨文加入Linux社区已有25年。这些年来,我们的目标始终如一:帮助Linux成为人人都能免费使用的最佳服务器操作系统,并为有需要的用户......
  • 模板
    1.线性筛模板voidget_primes(intn){for(inti=2;i<=n;i++){if(!st[i])primes[cnt++]=i;for(intj=0;primes[j]<=n/i;j++){st[primes[j]*i]=true;if(i%primes[j]==0)break;......
  • 【模板】modint
    modintbycjlstructm{ intx;m(into=0){x=o;}m(lllo){x=o%mod;}m&operator+=(ma){return(x+=a.x)%=mod,*this;}m&operator-=(ma){return(x+=mod-a.x)%=mod,*this;} m&operator*=(ma){return(x=1ll*x*a.x%mod),*this;}m&operator^=(intb){ma=*thi......
  • VUE使用模板页面并预留子页面区域
    1.新建模板页面MainLayout.vue,并在template里面防止标签用于嵌入子页面内容<template>'''其他页面内容'''<router-view></router-view>'''其他页面内容'''</template>2.在router的index.js中设置子路由,其中DailyData......
  • tzoj1471 wall(凸包模板题)
    题目大意n个点构成的城堡,给出每个点的坐标。若要修建距离城堡最近距离为L的城墙,问城墙的最短长度。凸包模板题,用Andrew算法求出凸包然后加上半径为L的圆的周长即可。Andrew算法首先对所有点按照y大小进行升序排序,如果y相同就按照x大小升......
  • (简单)寻找最大值
    pythondeffind_max(lst):ifnotlst:return"Emptylist"max_val=lst[0]fornuminlst:ifnum>max_val:max_val=numreturnmax_valshell#!/bin/bashfind_max(){local-alst=("$@&......
  • 最小生成树模板
    prim算法算法思想:每次选定未进入集合中和集合距离最小的点,用该点更新其他点到集合的距离,直到可以判断出不存在最小生成树或所有点均已进入集合下面虽然是两种写法,但是记忆时最好还是按照算法的思路来实现,也就是第2个代码。虽然会多一些边界处理,但是只要我们理解了算法思想即使......
  • 代码随想录算法训练营第十六天| 104.二叉树的最大深度 111.二叉树的最小深度 222.
      104.二叉树的最大深度 (优先掌握递归)    卡哥建议:什么是深度,什么是高度,如何求深度,如何求高度,这里有关系到二叉树的遍历方式。大家要先看视频讲解,就知道以上我说的内容了,很多录友刷过这道题,但理解的还不够。   题目链接/文章讲解/视频讲解:https://programmerc......
  • C++欧几里得算法求最大公约数和最小公倍数
    定义最大公约数即为GreatestCommonDivisor,常缩写为gcd。一组整数的公约数,是指同时是这组数中每一个数的约数的数。一组整数的最大公约数,是指所有公约数里面最大的一个。那么如何求最大公约数呢?我们先考虑两个数的情况。欧几里得算法过程如果我们已知两个数\(a\)和\(......