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

最大流模板

时间:2024-07-15 09:54:34浏览次数:18  
标签:return 最大 int ll flow ret dep 模板

P3376 【模板】网络最大流

#include<bits/stdc++.h>
#define fo(i,a,b) for (ll (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (ll (i)=(b);(i)>=(a);(i)--)
#define lc (o<<1)
#define rc ((o<<1)|1)
#define mk(x,y) make_pair((x),(y))
#define eb emplace_back
#define A puts("Yes")
#define B puts("No")
#define fi first
#define se second
using namespace std;
typedef double db;
typedef long long ll;
typedef unsigned long long ull;
typedef long long i64;
const ll inf=1ll<<60;
const ll mo1=1e9+9;
const ll mo2=1e9+7;
const ll P=131;
const ll Q=13331;
struct MF {
	const static int N=1e5+5;
	const static int M=1e6+5;
	const static int INF=1e9;
  	struct edge {
    	int v, nxt;
		ll cap, flow;
  	} e[M*2];

  	int head[N], tot = 0;

  	int n, S, T;
  	ll maxflow = 0;
  	int dep[N], cur[N];
  	MF(int nn,int s,int t)	{
  		n=nn;
  		S=s;
  		T=t;
  		memset(head, -1, sizeof head);
    	tot = 0;
 	}
  	void init() {
  		
    	memset(head, -1, sizeof head);
    	tot = 0;
  	}

	void addedge(int u, int v, int w) {
    	e[tot] = {v, head[u], w, 0};
    	head[u] = tot++;
    	e[tot] = {u, head[v], 0, 0};
    	head[v] = tot++;
  	}	

  	bool bfs() {
    	queue<int> q;
    	memset(dep, 0, sizeof(int) * (n + 1));

   		dep[S] = 1;
	    q.push(S);
	    while (q.size()) {
	    	int u = q.front();
	      	q.pop();
	      	for (int i = head[u]; ~i; i = e[i].nxt) {
	       		int v = e[i].v;
	        	if ((!dep[v]) && (e[i].cap > e[i].flow)) {
	          		dep[v] = dep[u] + 1;
	          		q.push(v); 
	        	}
	      	}
	    }
	    return dep[T];
	}

	ll dfs(int u, ll flow) {
		if ((u == T) || (!flow)) return flow;
	
		ll ret = 0;
	    for (int& i = cur[u]; ~i; i = e[i].nxt) {
			int v = e[i].v;
			ll d;
		    if ((dep[v] == dep[u] + 1) &&
		        (d = dfs(v, min(flow - ret, e[i].cap - e[i].flow)))) {
		        ret += d;
		        e[i].flow += d;
		        e[i ^ 1].flow -= d;
		        if (ret == flow) return ret;
		    }
	    }
	    return ret;
	}

  	void dinic() {
  		maxflow = 0;
    	while (bfs()) {
      		memcpy(cur, head, sizeof(int) * (n + 1));
      		maxflow += dfs(S, INF);
    	}
  	}
};
int n,m,s,t,x,y,z;
int main(){
//	freopen("data.in","r",stdin);

	scanf("%d %d %d %d",&n,&m,&s,&t);
	MF mf(n,s,t);
	
	fo(i,1,m) {
		scanf("%d %d %d",&x,&y,&z);
		mf.addedge(x,y,z);
	}
	
	mf.dinic();
	printf("%lld\n",mf.maxflow);
	

	return 0;
}
 
 

标签:return,最大,int,ll,flow,ret,dep,模板
From: https://www.cnblogs.com/ganking/p/18302520

相关文章

  • day11| 150. 逆波兰表达式求值 239. 滑动窗口最大值 347.前 K 个高频元素
    代码随想录算法训练营第十一天|150.逆波兰表达式求值239.滑动窗口最大值347.前K个高频元素Leetcode150.逆波兰表达式求值题目链接:https://leetcode.cn/problems/evaluate-reverse-polish-notation/description/题目描述:给你一个字符串数组tokens,表示一个根......
  • 【模板】单源最短路径(弱化版)
    【模板】单源最短路径(弱化版)洛谷P3371题目背景本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步P4779。题目描述如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度。输入格式第一行包含三个整数......
  • (网络流)最大流-增广路算法
    最大流概念(一般形式、一般模型):在一张有向图中,给定源点、汇点,每条边单位时间可以流x容量的水。有无限的水从源点流入,从汇点流出。求单位时间内,从汇点流出的水的最大值。(网络流)最大流-增广路算法核心思路:每次找到一条可以流水的路径,将其称为增广路。增广路的所以算法本质上都......
  • 最大值(前缀和)
    第1题   最大值 查看测评数据信息在一个遥远的星球上,有n个特殊的饮水器,它们按照从1到n的顺序排列。每个饮水器都有一个内置的储水罐,初始时第i个饮水器的储水罐中有A[i]单位的水。这个星球的居民有一种特殊的能力,他们可以进行不超过k次的水流转移操作。每次操......
  • 耍杂技的牛 模板
    题目: 农民约翰的 N 头奶牛(编号为 1..N)计划逃跑并加入马戏团,为此它们决定练习表演杂技。奶牛们不是非常有创意,只提出了一个杂技表演:叠罗汉,表演时,奶牛们站在彼此的身上,形成一个高高的垂直堆叠。奶牛们正在试图找到自己在这个堆叠中应该所处的位置顺序。这 N......
  • 基于uni-app与图鸟UI的知识付费小程序模板
    一、项目概述在知识经济蓬勃发展的背景下,移动互联网成为知识传播与消费的重要渠道。本项目旨在利用前沿的前端技术栈——uni-app及高效UI框架图鸟UI,打造一款集多功能于一体的、面向广大求知者的知识付费平台移动端模板。该模板旨在简化开发流程,加速产品迭代,同时确保卓越的用户......
  • 网站源码SEO公司pbootcms模板网页设计主题
    SEO公司的网站设计分享我很高兴向大家介绍我刚刚制作的SEO公司的网站设计。友好的站点界面,是打动访客的第一步。SEO公司网站主题网站设计旨在展示公司的专业能力、服务范围以及优化效果,吸引潜在客户的关注,提升公司在搜索引擎中的排名和可见性。以下是对SEO公司网站主题设计的......
  • 易优CMS模板标签assign定义变量模板文件中定义变量,可在其他标签里使用该变量
    【基础用法】标签:assign描述:模板文件中定义变量,可在其他标签里使用该变量用法:{eyou:assignname='typeid'value='5'/}文件:无涉及表字段:name=''变量名value=''赋给变量名的值底层字段:无 【更多示例】-------------------------------示例1----------------------......
  • DedeCMS模板目录的文件目录结构
    templets ┣━default·······································默认模板目录 ┃   ┣━style·······································模板CSS样式目录 ┃   ┣━js··......
  • kedaOJ#P0776. 【模板】可并堆
    思路可并堆不会的看作者的https://www.cnblogs.com/mcr130102/p/18301571代码复制都运行不了好吧#include<iostream>#include<vector>#include<queue>//堆用队列实现#include<algorithm>usingnamespacestd;constintMAXN=1e5+5;intparent[MAXN];intf......