单纯的求最大匹配 - -、第一道觉得有点难 第二道觉得简单 第三道就是水题了 。。汗
#include <iostream>
using namespace std;
const int N=210;
int n,m;
int link[N];
bool map[N][N],used[N];
bool DFS(int x)
{
for(int i=1; i<=m; i++)
{
if(!used[i] && map[x][i])
{
used[i] = true;
if(!link[i] || DFS(link[i]))
{
link[i] = x;
return true;
}
}
}
return false;
}
int main()
{
int i,j,count,num;
while(scanf("%d %d", &n, &m)!=EOF)
{
memset(map, false, sizeof(map));
memset(link, 0, sizeof(link));
for(i=1; i<=n; i++)
{
scanf("%d", &count);
while(count--)
{
scanf("%d", &j);
map[i][j] = true;
}
}
for(i=1,num=0; i<=n; i++)
{
memset(used, false, sizeof(used));
if(DFS(i)) num++;
}
printf("%d\n",num);
}
return 0;
}