您的位置:首页 > 理论基础 > 计算机网络

传说中的网络流24题

2015-08-03 16:58 405 查看

 [网络流24题] 搭配飞行员

【问题描述】     飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员。由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭配驾驶员才能使出航的飞机最多。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<fstream>
#define cin fin
#define cout fout
#define maxn 1000
using namespace std;
int head[maxn],next[maxn],point[maxn],now,visit[maxn];
int match[maxn];
ofstream fout ("flyer.out");
ifstream fin ("flyer.in");
void add(int x,int y)
{
next[++now] = head[x];
head[x]=now;
point[now] = y;
}
int dfs(int x)
{
for(int i=head[x];i;i=next[i])
{
int u = point[i];
if(visit[u])continue;
visit[u] = 1;
if(match[u]==-1 || dfs(match[u]))
{
match[u] = x;
return 1;
}
}
return 0;
}
int main()
{
int n,m,ans=0,x,y;
cin>>n>>m;
while(cin>>x>>y)
{
add(x,y);
}
memset(match,-1,sizeof(match));
for(int i=1;i<=m;i++)
{
memset(visit,0,sizeof(visit));
if(dfs(i))ans++;
}
cout<<ans<<endl;
return 0;
}
View Code

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: