fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. vector<int>p[22];
  4. struct node{
  5. int size;
  6. int index;
  7. };
  8.  
  9. bool visited[200002];
  10. //bool row[21];
  11. bool comp(const node a, const node b)
  12. {
  13. return a.size<b.size;
  14. }
  15. int main()
  16. {
  17. int n,m;
  18. //freopen("output.txt","r+",stdin);
  19. node q[21];
  20. memset(visited, false,sizeof(visited));
  21. //memset(row,false,sizeof(row));
  22. //p.clear();
  23. scanf("%d%d",&n,&m);
  24. for(int i=0;i<m;i++)
  25. {
  26. int s;
  27. cin>>s;
  28. for(int j=0;j<s;j++)
  29. {
  30. int b;
  31. cin>>b;
  32. p[i].push_back(b);
  33.  
  34. }
  35. q[i].size = s;
  36. q[i].index = i;
  37.  
  38. }
  39. sort(q,q+m,comp);
  40. //for(int i=0;i<m;i++)
  41. //{
  42. // cout<<q[i].size<<" ";
  43. //}
  44. //cout<<endl;
  45. bool flag= false;
  46. int count=0L;
  47. for(int i=0;i<m;i++)
  48. {
  49. bool flag2=false;
  50. //if(row[i])
  51. //continue;
  52. for(int j=0; j<q[i].size;j++ )
  53. {
  54. if(visited[p[q[i].index][j]])
  55. {
  56. break;
  57. }
  58. if(j==q[i].size-1)
  59. {
  60. count++;
  61. flag2= true;
  62. //row[i]=true;
  63. }
  64.  
  65. }
  66. if(flag2)
  67. {
  68. for(int j=0; j<q[i].size;j++)
  69. {
  70. visited[p[q[i].index][j]]=true;
  71. //cout<<p[q[i].index][j]<<" ";
  72. }
  73. //cout<<endl;
  74. }
  75.  
  76. }
  77. //}
  78. cout<<count<<endl;
  79.  
  80.  
  81.  
  82. }
Success #stdin #stdout 0s 3676KB
stdin
4 3
2 1 2
2 2 3
2 3 4
stdout
2