记录编号 398503 评测结果 AAAAAAAAAA
题目名称 [网络流24题] 搭配飞行员 最终得分 100
用户昵称 GravatarJustWB 是否通过 通过
代码语言 C++ 运行时间 0.004 s
提交时间 2017-04-22 12:32:03 内存使用 0.36 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
#include<vector>
#include<algorithm>
#include<stack>
#include<string>
#include<cmath>
#define maxn 0x7ffffff
using namespace std;
int n,nl,a,b,all;
int fl[102][102],cc[102],lj[102];
bool pan[102];
vector<int> lt[102];
queue<int> q;
bool bfs()
{
	memset(cc,0,sizeof(cc));
	memset(lj,0,sizeof(lj));
	q.push(0);pan[0]=1;
	while(!q.empty())
	{
		int now=q.front();
		q.pop();pan[now]=0;
		for(int i=0;i<lt[now].size();i++)
		{
			int nt=lt[now][i];
			if(cc[nt]==0&&fl[now][nt]!=0)
			{
				cc[nt]=cc[now]+1;
				lj[nt]=now;
				if(pan[nt])continue;
				q.push(nt);
			}
		}
	}
	if(!cc[101])return 0;
	return 1;
}
int di(int now,int flo)
{
	while(now)
	{
		flo=min(flo,fl[lj[now]][now]);
		now=lj[now];
	}
	now=101;
	while(now)
	{
		fl[lj[now]][now]-=flo;
		fl[now][lj[now]]+=flo;
		now=lj[now];
	}
	return flo;
}
int main()
{
	freopen("flyer.in","r",stdin);
	freopen("flyer.out","w",stdout);
	scanf("%d%d",&n,&nl);
	while(scanf("%d%d",&a,&b)!=EOF)
	{
		fl[a][b]=maxn;
		fl[0][a]=1;
		fl[b][101]=1;
		lt[a].push_back(b);
		lt[b].push_back(a);
		lt[0].push_back(a);
		lt[a].push_back(0);
		lt[b].push_back(101);
		lt[101].push_back(b);
	}
	while(bfs())
	{
		all+=di(101,maxn);
	}
	printf("%d",all);
	return 0;
}