二分匹配模板:
int m,n;
int used[N],link[N],mat[N][N];
int dfs(int t)
{
int i;
for(i=1; i<=n; i++)
{
if(used[i]==0&&mat[t][i])
{
used[i]=1;
if(link[i]==0||dfs(link[i]))
{
link[i]=t;
return 1;
}
}
}
return 0;
}
int match()
{
int sum=0;
for(i=1; i<=m; i++)
{
memset(used,0,sizeof(used));
if(dfs(i))
sum++;
}
return sum;
}