Time Limit: 10000MS | Memory Limit: 32768KB | 64bit IO Format: %I64d & %I64u |
Description
The input contains several data sets in text format. Each data set represents one set of subjects of the study, with the following description:
the number of students
the description of each student, in the following format
student_identifier:(number_of_romantic_relations) student_identifier1 student_identifier2 student_identifier3 ...
or
student_identifier:(0)
The student_identifier is an integer number between 0 and n-1, for n subjects.
For each given data set, the program should write to standard output a line containing the result.
Input
Output
Sample Input
Sample Output
Hint
Source
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define maxn 1000
int n;
int linker[maxn],g[maxn][maxn],vis[maxn];
int Find(int x)
{
for(int i = 0;i < n;i ++)
{
if(!vis[i] && g[x][i])
{
vis[i] = 1;
if(linker[i] == -1 || Find(linker[i]))
{
linker[i] = x;
return 1;
}
}
}
return 0;
}
int main()
{
char a,b,c;
int from,m,to,cnt;
while(scanf("%d", &n) != EOF)
{
cnt = 0;
memset(g, 0, sizeof(g));
for(int i = 0;i < n;i ++)
linker[i] = -1;
for(int i = 0;i < n;i ++)
{
cin>>from>>a>>b>>m>>c;
while(m --)
{
scanf("%d", &to);
g[from][to] = 1;
}
}
for(int i = 0;i < n;i ++)
{
memset(vis, 0, sizeof(vis));
if(Find(i))
cnt ++;
}
printf("%d\n", n - cnt/2);
}
return 0;
}