Time Limit: 5000MS | Memory Limit: 10000K | |
Total Submissions: 5324 | Accepted: 2304 |
Description
Input
Output
Sample Input
7 0: (3) 4 5 6 1: (2) 4 6 2: (0) 3: (0) 4: (2) 0 1 5: (1) 0 6: (2) 0 1 3 0: (2) 1 2 1: (1) 0 2: (1) 0
Sample Output
5 2
Source
因为男女生的人数没有规定,所以有重复计算
所以除以2,就把重复计算给滤掉了。
#include<stdio.h>
#include<string.h>
bool mat[505][505];
bool usedif[505];
int link[505];
int n;
bool can(int t)
{
int i;
for(i=0;i<n;i++)
if(!usedif[i]&&mat[t][i])
{
usedif[i]=true;
if(link[i]==-1||can(link[i]))
{
link[i]=t;
return true;
}
}
return false;
}
int maxMatch()
{
int i,num=0;
memset(link,-1,sizeof(link));
for(i=0;i<n;i++)
{
memset(usedif,0,sizeof(usedif));
if(can(i))
num++;
}
return num;
}
int main()
{
int i,u,v,m,ans;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
memset(mat,0,sizeof(mat));
for(i=0;i<n;i++)
{
scanf("%d: (%d)",&u,&m); //注意 //注意这里的输入
while(m--)
{
scanf("%d",&v);
mat[u][v]=true;
}
}
ans=n-maxMatch()/2;
printf("%d/n",ans);
}
return 0;
}