#include<iostream> #define MAXN 1002 using namespace std; int T[MAXN],X[MAXN],Y[MAXN],par[MAXN],shugao[MAXN]; void init(int n) { int i; for(i=0;i<n;i++) { par[i]=i;//一开始这些节点并没有联系 shugao[i]=0; } } int f_ind(int x) { if(par[x]==x) { return x; }else{ return par[x]=f_ind(par[x]); } } bool same(int x,int y) { return f_ind(x)==f_ind(y); } void unite(int x,int y) { x=f_ind(x); y=f_ind(y); if(x==y) { return ; } if(shugao[x]<shugao[y]) { par[x]=y; } else { par[y]=x; if(shugao[x]==shugao[y]) { shugao[x]++; } } } int main() { int i,N,K,x,y,t; cin >> N>>K; for(i=0;i<K;i++)//输入K组数据,范围在N之间 { cin>>T[i]>>X[i]>>Y[i]; } init(3*N); int ans=0;//记录错误信息 for(i=0;i<K;i++) { x=X[i],y=Y[i],t=T[i]; if(x<0||y>=N||y>N-1||y<0) { ans++; continue ; } if(t==1) { if(same(x,y+N)||same(x,y+2*N)) { ans++; } else { unite(x,y); unite(x+N,y+N); unite(x+2*N,y+2*N); } } else { if(same(X[i],Y[i])||same(X[i],Y[i]+2*N)) { ans++; } else { unite(x,y+N); unite(x+N,y+2*N); unite(x+2*N,y); } } } cout<<ans<<endl; }
时间: 2024-10-13 21:03:24