• 网络流24题 T1 飞行员配对方案问题


    二分图

    #include<bits/stdc++.h>
    using namespace std;
    int x,y,S,T,MAXN=99999999,level[500],lin[500],ans=0,n,m,len=0,q[500];
    struct one
    {
    	int x,y,next,flow,v,reverse;
    	bool f;
    };
    one e[50000];
    void insert(int xx,int yy,int vv)
    {
    	e[++len].next=lin[xx];
    	lin[xx]=len;
    	e[len].x=xx;
    	e[len].y=yy;e[len].v=vv;
    	e[len].reverse=len+1;
    	e[++len].next=lin[yy];
    	lin[yy]=len;
    	e[len].y=xx;e[len].v=0;
    	e[len].reverse=len-1;
    }
    bool makelevel()
    {
    	memset(level,-1,sizeof(level));
    	q[1]=0;level[0]=0;
    	int head=0,tail=1;
    	while(head++<tail)
    	{
    		int tn=q[head];
    		for(int i=lin[tn];i;i=e[i].next)
    		{
    			if(e[i].v>0&&level[e[i].y]<0)
    			{
    				q[++tail]=e[i].y;
    				level[e[i].y]=level[tn]+1;
    			}
    		}
    	}
    	return level[T]>=0;
    }
    int MAXflow(int aa,int flow)
    {
    	if(aa==T)return flow;
    	int maxflow=0,d=0;
    	for(int i=lin[aa];maxflow<flow&&i;i=e[i].next)
    	{
    		if(e[i].v&&level[e[i].y]==level[aa]+1)
    		{
    			if(d=MAXflow(e[i].y,min(flow-maxflow,e[i].v)))
    			{
    				e[i].v-=d;
    				e[e[i].reverse].v+=d;
    				maxflow+=d;
    			}
    		}
    	}
    	if(maxflow<=0)level[aa]=-1;
    	return maxflow;
    }
    void dinic()
    {
    	while(makelevel())
    		ans+=MAXflow(S,MAXN);
    }
    int main()
    {
    	scanf("%d%d",&m,&n);
    	S=0;T=n+m+1;
    	for(int i=1;i<=m;i++)insert(S,i,1);
    	for(int i=1;i<=n;i++)insert(i+m,T,1);
    	while(1)
    	{
    		scanf("%d%d",&x,&y);
    		if(x==-1&&y==-1)break;
    		insert(x,y+m,1);
    		e[len-1].f=true;
    	}
    	dinic();
    	printf("%d
    ",ans);
    	for(int i=1;i<=len;i++)
    	{
    		if(e[i].f&&e[i].v==0)printf("%d %d
    ",e[i].x,e[i].y-m);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    stl学习笔记—set/multimap
    2013 杭州站 hdoj4778 Gems Fight!
    矩阵加速数列递推
    暑假写的两个数据结构
    AC自动机模板 hdoj2222 UVA-11468
    树莓派安装3.5英寸触摸屏幕
    树莓派设置NTP同步
    在树莓派上设置无线静态IP
    运行tomcat7w.exe未安装指定的服务
    LoadRunner 11安装Micosoft Visual C++ 2005 SP1时提示命令行选项语法错误
  • 原文地址:https://www.cnblogs.com/mybing/p/9044752.html
Copyright © 2020-2023  润新知