n个魔法师,m个魔法杖,每个魔法杖适用人数为k,求最大魔法师匹配魔法杖数
#include<iostream>
#include<cstdio>
#include<cstring>
const int maxn = 205;
using namespace std;
int link[maxn],vis[maxn];
struct node
{
int v,next;
};
node e[maxn*1000];
int head[maxn],tot;
void Init()
{
tot = 0;
memset(head, -1,sizeof(head));
memset(link, -1,sizeof(link));
}
void Add(int u,int v)
{
e[tot].v = v;
e[tot].next = head[u];
head[u] = tot++;
}
int Find(int x)
{
for(int i = head[x]; i != -1; i = e[i].next)
{
int v = e[i].v;
if(!vis[v])
{
vis[v] = 1;
if(link[v] == -1 || Find(link[v]))
{
link[v] = x;
return 1;
}
}
}
return 0;
}
int main()
{
int n,m,v,u,t;
while(scanf("%d%d",&n,&m) != EOF)
{
Init();
// scanf("%d",&m);
for(int i = 1; i <= m; i++)
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&u);
Add(u,i);
}
}
int cnt = 0;
for(int i = 1; i <= n; i++)
{
memset(vis, 0, sizeof(vis));
if(Find(i))
cnt++;
}
printf("%d\n",cnt);
}
return 0;
}