Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void doit(){
- int n=gi(),m=gi(), ans=0;
- vi mc(m);
- vector<vi> pp(m,vi(n,-2));
- for(int i=0;i<m;i++){mc[i]=gi();}
- for(int i=0;i<m;i++){
- for(int j=0;j<n;j++){ if(gi()){ pp[i][j]=mc[i]; } }
- }
- vi q(n+n), vn(n,false),vm(m,false), cat(n,-1), vc(3);
- int qb,qe,tn;
- for(int i=0;i<n;i++){
- bool hz=false, ho=false, hm=false;
- for(int j=0;j<m;j++){
- if(pp[j][i]==0)hz=true;
- else if(pp[j][i]==-1)hm=true;
- else if(pp[j][i]==1)ho=true;
- }
- if(ho && hm)ans++,vn[i]=true;
- else if(!hz)vn[i]=true;
- else if(ho){cat[i]=2;}
- else if(hm){cat[i]=1;}
- else{cat[i]=0;}
- }
- for(int i=0;i<n;i++)
- if(!vn[i]){
- qb=qe=0;
- q[qe++]=i;
- vn[i]=true;
- vc[0]=vc[1]=vc[2]=0;
- while(qb<qe){
- tn=q[qb++];
- vc[cat[tn]]++;
- for(int j=0;j<m;j++)
- if(pp[j][tn]!=-2 && !vm[j]){
- vm[j]=true;
- for(int ii=0;ii<n;ii++)
- if(pp[j][ii]!=-2 && !vn[ii])q[qe++]=ii,vn[ii]=true;
- }
- }
- tn=vc[0]+vc[1]+vc[2];
- ans+=min(vc[1],vc[2]);
- }
- cout<<ans<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement