#include <stdio.h>
#include <string.h>
int N,M;
int map[201][201];
int pair[201],visit[201];
int num;
int dfs(int v)
{
int i;
if(visit[v] == 0)
{
visit[v] = 1;
for(i = 1; i <= N; i++)
{
if(map[v][i] == 1)
{
if(pair[i] == 0 || dfs(pair[i]) == 1)
{
pair[i] = v;
return 1;
}
}
}
}
return 0;
}
int main(void)
{
int tc, T,K,i,j,tmp;
//freopen("input.txt", "r", stdin);
setbuf(stdout, NULL);
scanf("%d", &T);
for(tc = 0; tc < T; tc++)
{
num = 0;
memset(map, 0, sizeof(map));
memset(pair, 0, sizeof(pair));
scanf("%d %d", &N, &M);
if(M == 0)
scanf("%d", &M);
for(i = 1; i <=M; i++)
{
scanf("%d", &K);
for(j = 1; j <= K; j++)
{
scanf("%d", &tmp);
map[i][tmp] = 1;
}
}
for(i = 1; i <= M; i++)
{
memset(visit, 0, sizeof(visit));
if(dfs(i) == 1)
num++;
}
printf("%d\n", num);
}
return 0;//Your program should return 0 on normal termination.
}
匈牙利算法示例
最新推荐文章于 2024-03-01 10:51:33 发布