二分图匹配模板
要注意的是按顺序答题,即一道题答不上来直接终止
/**************************************************************
Problem: 1191
User: syh0313
Language: C++
Result: Accepted
Time:32 ms
Memory:6020 kb
****************************************************************/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
using
namespace
std;
int
n,m,mp[1100][1100],ans,lnk[1100];
bool
ud[1100];
bool
dfs(
int
x)
{
for
(
int
i=0;i<m;i++)
if
(mp[x][i] && !ud[i])
{
ud[i]=1;
if
(lnk[i]==-1 || dfs(lnk[i])) {lnk[i]=x;
return
1;}
}
return
0;
}
int
main()
{
scanf
(
"%d%d"
,&m,&n);
memset
(lnk,-1,
sizeof
lnk);
for
(
int
i=0;i<n;i++)
{
int
xx,yy;
scanf
(
"%d%d"
,&xx,&yy); mp[i][xx]=1; mp[i][yy]=1;}
for
(
int
i=0;i<n;i++)
{
memset
(ud,0,
sizeof
ud);
if
(dfs(i)) ans++;
else
break
;}
printf
(
"%d\n"
,ans);
return
0;
}