#include<stdio.h>
const int MAX=50010;
int pre[3*MAX];
void init(int n){
for(int i=1;i<n;i++)
pre[i]=i;
}
int find(int x){
if(pre[x]==x) return x;
return pre[x]=find(pre[x]);
}
void unite(int x,int y){
x=find(x);
y=find(y);
if(x==y) return;
pre[x]=y;
}
bool same(int x,int y){
return find(x)==find(y);
}
int main(){
int n,k,d,x,y;
scanf("%d%d",&n,&k);
int ans=0;
init(3*MAX+3);
while(k--){
scanf("%d%d%d",&d,&x,&y);
if(x<1||x>n||y<1||y>n){
ans++;
continue;
}
if(d==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,y)||same(x,y+2*n))
ans++;
else{
unite(x,y+n);
unite(x+n,y+2*n);
unite(x+2*n,y);
}
}
}
printf("%d\n",ans);
return 0;
}
并查集poj1182食物链
最新推荐文章于 2018-09-19 22:28:39 发布