zoukankan      html  css  js  c++  java
  • 首页

    个人简介:

    • 一名初二的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;
    }
    
  • 相关阅读:
    git操作
    计算天数
    web小结~2019.3.24
    数据统计值的计算+PYTHON
    python~序列类型及操作
    一个日期加上若干天后是什么日期
    完数与盈数
    分段函数
    求最大最小
    D进制的A+B
  • 原文地址:https://www.cnblogs.com/snow-sword/p/12078985.html
Copyright © 2011-2022 走看看