记录编号 177858 评测结果 AAAAAAAAAA
题目名称 [网络流24题] 搭配飞行员 最终得分 100
用户昵称 Gravatar/k 是否通过 通过
代码语言 C++ 运行时间 0.009 s
提交时间 2015-08-12 20:19:27 内存使用 0.36 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
int c[110][110],d[110],n,n1;
#define m n+1
bool gb()
{
	for(int i=1;i<=n+10;i++)
		d[i]=-1;
	d[m]=-1;
	d[0]=0;
	queue<int>q;
	q.push(0);
	while(!q.empty())
	{
		int k=q.front();
		//printf("%d",k);
		q.pop();
		for(int i=1;i<=n+1;i++)
		{
			if(c[k][i]>0&&d[i]<0)
			{
				d[i]=d[k]+1;
				q.push(i);
			}
		}
	}
	//printf("%d",d[m]);
	if(d[m]==-1)
		return 0;
	return 1;
}
int gd(int k,int r)
{
	if(k==m)
		return r;
	for(int i=1;i<=n+1;i++)
	{
		if(c[k][i]>0&&d[k]+1==d[i])
		{
			int o=gd(i,min(r,c[k][i]));
			if(o>0)
			{
				c[k][i]-=o;
				c[i][k]+=o;
				return o;
			}
		}
	}
	return 0;
}
int main()
{
	freopen("flyer.in","r",stdin);
	freopen("flyer.out","w",stdout);
	scanf("%d%d",&n,&n1);
	int aa,bb;
	while(~scanf("%d%d",&aa,&bb))
	{
		c[0][aa]=c[aa][bb]=c[bb][m]=1;
	}
	int p=0;
	while(gb())
	{
		p+=gd(0,0x3fffffff);
	}
	printf("%d",p);
}