zoukankan      html  css  js  c++  java
  • [网络流24题]飞行员配对方案问题

    题目:洛谷P2756。

    题目大意:有m个外籍飞行员和n个英国飞行员,每一名外籍飞行员都可以与其他若干名英国飞行员很好地配合。现在一架飞机要一名外籍飞行员和一名英国飞行员开,且他们必须有默契,求一次最多能开出多少飞机。

    解题思路:明显二分图匹配,我用的匈牙利算法(当然网络流也可以,只不过代码量会大一点)。

    C++ Code:

    #include<bits/stdc++.h>
    using namespace std;
    int m,n,s;
    bool b[105][105],used[105];
    int lft[105];
    int dfs(int u){
    	for(int i=1;i<=n;++i)
    	if(b[u][i]&&!used[i]){
    		used[i]=true;
    		if(lft[i]==0||dfs(lft[i])){
    			lft[i]=u;
    			return 1;
    		}
    	}
    	return 0;
    }
    void pipei(){
    	s=0;
    	memset(lft,0,sizeof(lft));
    	for(int i=1;i<=m;++i){
    		memset(used,0,sizeof(used));
    		s+=dfs(i);
    	}
    }
    int main(){
    	scanf("%d%d",&m,&n);
    	int u,v;
    	while(scanf("%d%d",&u,&v)&&u+v>0)b[u][v-m]=true;
    	pipei();
    	printf("%d
    ",s);
    	for(int i=1;i<=n;++i)
    	if(lft[i]!=0)printf("%d %d
    ",lft[i],i+m);
    	return 0;
    }
    
  • 相关阅读:
    ACM-超级楼梯
    clientt.c
    call.c
    answer.c
    aa.c
    client.c
    service.c
    自己动手开发jQuery插件
    apache-commons-net Ftp 进行文件、文件夹的上传下载及日志的输出
    在Eclipse中制作SSH配置文件提示插件
  • 原文地址:https://www.cnblogs.com/Mrsrz/p/7252451.html
Copyright © 2011-2022 走看看