Description
广州二中苏元实验学校一共有n个社团,分别用1到n编号。
广州二中苏元实验学校一共有m个人,分别用1到m编号。每个人可以参加一个或多个社团,也可以不参加任何社团。
每个社团都需要选一个代表。谦哥希望更多的人能够成为代表。
Input
第一行输入两个数n和m。
以下n行每行若干个数,这些数都是不超过m的正整数。其中第i行的数表示社团i的全部成员。每行用一个0结束。
Output
输出最多的能够成为代表的人数。
Sample Input
4 4
1 2 0
1 2 0
1 2 0
1 2 3 4 0
Sample Output
3
Hint
各个测试点1s
n,m<=200
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 int a[210][210]; 5 int link1[210]={0}; 6 bool vis[210]={false}; 7 int n,m,x,ans; 8 bool find(int x) 9 { 10 for (int i=1;i<=m;i++) 11 if (a[x][i] && !vis[i]) 12 { 13 vis[i]=true; 14 if (link1[i]==0 || find(link1[i]))//递归 15 { 16 link1[i]=x; 17 return true; 18 } 19 } 20 return false; 21 } 22 int main() 23 { 24 cin>>n>>m; 25 for (int i=1;i<=n;i++) 26 { 27 while (1) 28 { 29 cin>>x; 30 if (x) a[i][x]=1; 31 else break; 32 } 33 } 34 ans=0; 35 for (int i=1;i<=n;i++) 36 { 37 memset(vis,0,sizeof(vis));//每一步查找前清空 38 if (find(i)) ans++; 39 } 40 cout<<ans; 41 return 0; 42 }