首页

个人简介:

  • 一名初二的oier
  • 坐标杭州
  • 入坑c++ 2年
  • 是一名菜鸡
  • 这里将存放我的部分题解,学习笔记等
    2019/12/12:属于我的hello world!
    放一下我的码风:
#include<bits/stdc++.h>
using namespace std;
int n,m,s,t,cnt=1,ans,head[10005],cur[10005],dep[10005],gap[10005];
struct edge{
	int nx,to,val;
}e[200005];
inline void add(int u,int v,int w){
	e[++cnt].to=v;
	e[cnt].val=w;
	e[cnt].nx=head[u];
	head[u]=cnt;
}
inline void bfs(int sm){
	queue<int>q;
	q.push(sm);
	memset(dep,-1,sizeof dep);
	dep[sm]=0,gap[0]=1;
	while(!q.empty()){
		int x=q.front();
		q.pop();
		for(int i=head[x];i;i=e[i].nx){
			int y=e[i].to;
			if(dep[y]!=-1)
				continue;
			q.push(y);
			dep[y]=dep[x]+1;
			++gap[dep[y]];
		}
	}
}
inline int dfs(int x,int flow){
	if(x==t){
		ans+=flow;
		return flow;
	}
	int u=0,v=0;
	for(int i=cur[x];i;i=e[i].nx){
		int y=e[i].to;
		cur[x]=i;
		if(dep[y]+1==dep[x]&&e[i].val){
			v=dfs(y,min(flow-u,e[i].val));
			if(v){
				e[i].val-=v;
				e[i^1].val+=v;
				u+=v;
			}
		}
		if(u==flow)
			return u;
	}
	--gap[dep[x]];
	if(!gap[dep[x]])
		dep[s]=n+1;
	++gap[++dep[x]];
	return u;
}
inline int isap(){
	bfs(t);
	while(dep[s]<n)
		memcpy(cur,head,sizeof head),
		dfs(s,INT_MAX);
	return ans;
}
int main(){
    scanf("%d%d%d%d",&n,&m,&s,&t);
    for(int i=1,u,v,w;i<=m;++i){
    	scanf("%d%d%d",&u,&v,&w);
    	add(u,v,w);
    	add(v,u,0);
	}
    printf("%d",isap());
    return 0;
}
原文地址:https://www.cnblogs.com/snow-sword/p/12078985.html