Girls and Boys
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 12148 Accepted Submission(s): 5724
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.
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int fr[511][511];//A和B是否有關係
int f[511];//匹配情況
int vis[511];
int n;
bool find(int x)
{
for(int i = 0; i < n; i++)
{
if(fr[x][i] && !vis[i])
{
vis[i] = 1;
if(f[i] == -1 || find(f[i]))
{
f[i] = x;
return true;
}
}
}
return false;
}
int main()
{
int T,t,a,b,ans;//a有b個關係
while(~scanf("%d",&T))
{
n = T;
memset(fr,0,sizeof(fr));
memset(f,-1,sizeof(f));
for(int i = 0; i < T; i++)
{
scanf("%d: (%d)",&a,&b);
for(int j = 0; j < b; j++)
{
scanf("%d",&t);
fr[a][t] = 1;
fr[t][a] = 1;
}
}
ans=0;
for(int i = 0; i < n; i++)
{
memset(vis,0,sizeof(vis));
if(find(i))
ans++;
}
ans = n - (ans / 2);//頂點數-最大配對數=最大獨立集數(因爲把集合擴大了一倍,所以除以二)
printf("%d\n",ans);
}
return 0;
}