码迷,mamicode.com
首页 > 其他好文 > 详细

[洛谷P2756]飞行员配对方案问题

时间:2017-07-28 20:58:51      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:its   style   匈牙利算法   多少   for   class   memset   size   div   

题目大意:有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\n",s);
	for(int i=1;i<=n;++i)
	if(lft[i]!=0)printf("%d %d\n",lft[i],i+m);
	return 0;
}

 

[洛谷P2756]飞行员配对方案问题

标签:its   style   匈牙利算法   多少   for   class   memset   size   div   

原文地址:http://www.cnblogs.com/Mrsrz/p/7252451.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!