#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N = 508;
int G[N][N],link[N],used[N],n,m;
bool path(int u)
{
for(int i=0;i<m;i++)
if(G[u][i] && !used[i])
{
used[i] = 1;
if(link[i]==-1 || path(link[i]))
{
link[i] = u;
return true;
}
}
return false;
}
void hungary()
{
int i,ans = 0;
memset(link,-1,sizeof(link));
for(i=0;i<n;i++)
{
memset(used,0,sizeof(used));
if(path(i)) ans++;
}
cout<<n-ans/2<<endl;
}
int main()
{
//0: (3) 4 5 6
int c,i,j,k,a,b;
char s1[20],s2[20];
while(~scanf("%d",&m))
{
memset(G,0,sizeof(G));
n=m;
for(i=0;i<n;i++)
{
scanf("%s%s",s1,s2);
sscanf(s1,"%d:",&a);
//cout<<a<<endl;
sscanf(s2,"(%d)",&k);
//cout<<k<<endl;
for(j=0;j<k;j++)
{
scanf("%d",&b);
G[a][b] = 1;
}
}
hungary();
}
return 0;
}
poj1466
最新推荐文章于 2022-02-25 19:38:17 发布