记录编号 37581 评测结果 AAAAAAAAAA
题目名称 [SDOI 2007] 环球旅行问题 最终得分 100
用户昵称 GravatarMakazeu 是否通过 通过
代码语言 C++ 运行时间 0.018 s
提交时间 2012-04-03 11:44:48 内存使用 0.28 MiB
显示代码纯文本
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
using namespace std;
const int MAX=1002;
const int PV=500;
int Used[MAX],Mat[MAX];
vector<int> Map[MAX];
int N,M;

inline void init()
{
	scanf("%d %d\n",&N,&M);
	int a,b;
	for(int i=1;i<=M;i++)
	{
		scanf("%d %d\n",&a,&b);
		a++,b++;
		Map[a].push_back(b+PV);
		Map[b+PV].push_back(a);
	}
}

bool cross(int k)
{
	int v;
	for(unsigned int i=0;i<Map[k].size();i++)
	{
		v=Map[k][i];
		if(Used[v]) continue;
		Used[v]=1;
		if(!Mat[v] || cross(Mat[v]))
		{
			Mat[v]=k;
			return true;
		}
	}
	return false;
}

inline void hungary()
{
	int Ans=N;
	for(int i=1;i<=N;i++)
	{
		memset(Used,0,sizeof(Used));
		Ans-=cross(i);
	}
	printf("%d\n",Ans);
}

int main() 
{
	freopen("chbtrip.in","r",stdin);
	freopen("chbtrip.out","w",stdout);
	init();
	hungary();
	return 0;
}