递归查询
nxt数组记录下一个可能值
依次搜索出最大匹配值
正确性已被证明在此不做赘述
int k, n, m;
const int MAXN = 520;
vector <int> edge[MAXN];
int used[MAXN] = {0};
int nxt[MAXN] = {0};
bool rfind(int x)
{
for(int i = 0; i < edge[x].size(); i++)
{
int to = edge[x][i];
if(!used[to])
{
used[to] = true;
if(!nxt[to] || rfind(nxt[to]))
{
nxt[to] = x;
return true;
}
}
}
return false;
}
int cnt()
{
int sum = 0;
for(int i = 1; i <= n; i++)
{
memset(used, 0, sizeof(used));
if(rfind(i))
sum++;
}
return sum;
}