• 模板—网络流


    模板—网络流

     Code:

    #include <queue>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    #define N 100010
    #define M 1000010
    #define inf 1000000000
    int head[N],cur[N],to[M<<1],val[M<<1],nxt[M<<1],idx=1,ans,dis[N],n,m,s,t;
    void add(int a,int b,int c)
    	{nxt[++idx]=head[a],to[idx]=b,val[idx]=c,head[a]=idx;}
    bool bfs()
    {
    	memset(dis,-1,sizeof dis);
    	queue <int> q; q.push(s),dis[s]=0;
    	while(!q.empty())
    	{
    		int p=q.front(); q.pop();
    		for(int i=head[p];i;i=nxt[i])
    			if(dis[to[i]]==-1&&val[i])
    				dis[to[i]]=dis[p]+1,q.push(to[i]);
    	} return dis[t]!=-1;
    }
    int dfs(int p,int flow)
    {
    	int temp=flow,now;
    	if(p==t) return flow;
    	for(int i=cur[p];i;i=nxt[i])
    		if(val[i]&&dis[to[i]]==dis[p]+1)
    		{
    			now=dfs(to[i],min(temp,val[i]));
    			if(!now) dis[to[i]]==-1;
    			val[i]-=now,val[i^1]+=now,temp-=now;
    			if(val[i]) cur[p]=i;
    			if(!temp) break;
    		} return flow-temp;
    }
    void dinic() {while(bfs()) memcpy(cur,head,sizeof cur),ans+=dfs(s,inf);}
    int main()
    {
    	scanf("%d%d%d%d",&n,&m,&s,&t);
    	for(int i=1,x,y,z;i<=m;i++) scanf("%d%d%d",&x,&y,&z),add(x,y,z),add(y,x,0);
    	dinic(),printf("%d
    ",ans);
    }
    

      

  • 相关阅读:
    dw2018修改为中文
    C# 响应一个html页面
    layui 时间控件 单击 年直接赋值
    js 正则 测试
    python之读取和写入csv文件
    python安装与配置
    hive支持sql大全
    HiveQL与SQL区别
    Hadoop插件安装
    简单算法学习之快速排序详解
  • 原文地址:https://www.cnblogs.com/yangsongyi/p/10658716.html
Copyright © 2020-2023  润新知