Advertisement
Guest User

Untitled

a guest
May 29th, 2016
296
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.06 KB | None | 0 0
  1. void doit(){
  2. int n=gi(),m=gi(), ans=0;
  3. vi mc(m);
  4. vector<vi> pp(m,vi(n,-2));
  5. for(int i=0;i<m;i++){mc[i]=gi();}
  6. for(int i=0;i<m;i++){
  7. for(int j=0;j<n;j++){ if(gi()){ pp[i][j]=mc[i]; } }
  8. }
  9. vi q(n+n), vn(n,false),vm(m,false), cat(n,-1), vc(3);
  10. int qb,qe,tn;
  11.  
  12. for(int i=0;i<n;i++){
  13. bool hz=false, ho=false, hm=false;
  14. for(int j=0;j<m;j++){
  15. if(pp[j][i]==0)hz=true;
  16. else if(pp[j][i]==-1)hm=true;
  17. else if(pp[j][i]==1)ho=true;
  18. }
  19. if(ho && hm)ans++,vn[i]=true;
  20. else if(!hz)vn[i]=true;
  21. else if(ho){cat[i]=2;}
  22. else if(hm){cat[i]=1;}
  23. else{cat[i]=0;}
  24. }
  25. for(int i=0;i<n;i++)
  26. if(!vn[i]){
  27. qb=qe=0;
  28. q[qe++]=i;
  29. vn[i]=true;
  30. vc[0]=vc[1]=vc[2]=0;
  31. while(qb<qe){
  32. tn=q[qb++];
  33. vc[cat[tn]]++;
  34. for(int j=0;j<m;j++)
  35. if(pp[j][tn]!=-2 && !vm[j]){
  36. vm[j]=true;
  37. for(int ii=0;ii<n;ii++)
  38. if(pp[j][ii]!=-2 && !vn[ii])q[qe++]=ii,vn[ii]=true;
  39. }
  40. }
  41. tn=vc[0]+vc[1]+vc[2];
  42. ans+=min(vc[1],vc[2]);
  43. }
  44. cout<<ans<<endl;
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement