前边和后边性别不同!!!不然NP了 Girls and Boys Problem 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.
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<string> #include<memory.h> #include<algorithm> #include<map> #include<queue> using namespace std; int Map[1010][1010]; int used[1010],linke[1010]; int s,t,n; int _S(){ char c=getchar(); while(c>'9'||c<'0') c=getchar(); int num=0; while(c<='9'&&c>='0') { num=num*10+c-'0'; c=getchar(); } return num; } bool _find(int v) { for(int i=1;i<=n;i++){ if(Map[v][i]&&!used[i]) { used[i]=1; if((linke[i]==-1)||_find(linke[i])){ linke[i]=v; return true; } } } return false; } int main() { int m,i,j,ans=0,tmp; while(~scanf("%d",&n)){ ans=0; memset(linke,-1,sizeof(linke)); memset(Map,0,sizeof(Map)); for(int d=1;d<=n;d++){ s=_S(); tmp=_S(); for(i=1;i<=tmp;i++){ t=_S(); Map[s+1][t+1]=1; } } for(i=1;i<=n;i++){ memset(used,0,sizeof(used)); if(_find(i)) ans++; } cout<<n-ans/2<<endl; } return 0; }