算法随笔——网络流

int s,t;
int h[N],e[N],ne[N],idx,w[N];
int now[N];
void add(int a,int b,int c1,int c2)
{
	e[idx] = b,ne[idx] = h[a],w[idx] = c1,h[a] = idx++;
	e[idx] = a,ne[idx] = h[b],w[idx]= c2,h[b] = idx++;
}
int d[N];
bool bfs()
{
	for (int i = 0;i <= n + m + 1;i++) d[i] = 0,now[i] = h[i];
	queue<int> q;q.push(s);
	d[s] = 1;
	while (q.size())
	{
		int x= q.front();q.pop();
		for (int i = h[x];i!=-1;i=ne[i])
		{
			if (w[i] && !d[e[i]])
			{
				d[e[i]] = d[x] + 1;
				if (e[i] == t) return 1;q.push(e[i]);
			}
		}
	}return 0;
}
int dinic(int x,int flow)
{
	if (x == t) return flow;
	int rest = flow;
	for (int i = now[x];i!=-1&&rest;now[x]=i= ne[i])
	{
		if (w[i] && d[e[i]] == d[x] + 1)
		{
			int k = dinic(e[i],min(rest,w[i]));
			rest -= k;w[i] -=k;w[i^1] += k;
			if (!k) d[e[i]] = -1;
		}
	}
	return flow - rest;
}
int maxflow()
{
	int res = 0;while(bfs()) res += dinic(s,INF);
	return res;
}
posted @   codwarm  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示