思路:简单的二分匹配。
//332K
0MS
#include <stdio.h>
#include <string.h>
#define N 205
int mat[N][N],vis[N],xM[N],yM[N];
int n,m;
bool DFS(int u)
{
1;v <= n;v ++)
if (mat[u][v] && !vis[v])
{
vis[v] = 1;
if (yM[v] == -1 ||DFS(yM[v]))
{
yM[v] = u,xM[u] = v;
return true;
}
}
false;
}
int MaxMatch ()
{
0;
(xM,-1,sizeof(xM));
(yM,-1,sizeof(yM));
1;u <= n;u ++)
if (xM[u] == -1)
{
memset (vis,0,sizeof(vis));
if (DFS(u))
res ++;
}
res;
}
int main ()
{
u,v,s;
(~scanf ("%d%d",&n,&m))
memset (mat,0,sizeof(mat));
for (u = 1;u <= n;u ++)
{
scanf ("%d",&s);
while (s --)
{