#include<stdio.h>
const int Maxn=501;
bool g[Maxn][Maxn],visit[Maxn];
int link[Maxn];
int n;
bool find(int x)
{
for(int i=0;i<n;i++)
{
if(g[x][i]&&!visit[i])
{
visit[i]=true;
if(link[i]==-1||find(link[i]))
{
link[i]=x;
return true;
}
}
}
return false;
}
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
g[i][j]=false;
for(int i=0;i<n;i++)
{
int num,k;
scanf("%*d: (%d)",&num);
for(int j=0;j<num;j++)
{
scanf("%d",&k);
g[i][k]=true;
}
}
int match=0;
for(int i=0;i<n;i++)
link[i]=-1;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
visit[j]=false;
if(find(i)) match++;
}
printf("%d\n",n-match/2);
}
return 0;
}
|