题目 14 食物链

来源:互联网 发布:淘宝上李宁官方网店 编辑:程序博客网 时间:2024/06/08 04:23

#include<stdio.h>
using namespace std;
int p[150005],r[150005];
void I(){
for(int i=0;i<=N*3;i++){
p[i]=i;
r[i]=0;
}
}
int find(int i){
if(p[i]!=i) p[i]=find(p[i]);
return p[i];
}
void unions(int x,int y){
int tx=find(x);
int ty=find(y);
if(tx!=ty){
if(r[tx]>r[ty])p[ty]=tx;
else if(r[tx]<r[ty])p[tx]=ty;
else{
p[ty]=tx;
r[tx]++;
}
}
}
bool same(int x,int y){
return find(x)==find(y);
}

int main(){
int M=0,t,X,Y;
int N,K;
scanf("%d%d",&n,&T);
I();
while(K--){
scanf("%d%d%d",&t,&X,&Y);
if(X<=0||X>N||Y<=0||Y>N) M++;
else if(t==1){
if(same(X,Y+N)||same(X,Y+2*N)) M++;
else{
unions(X,Y);
unions(X+N,Y+N);
unions(X+2*N,Y+2*N);
}
}
else if(t==2){
if(same(X,Y+2*N)||same(X,Y)) M++;
else{
unions(X,Y+N);
unions(X+N,Y+2*N);
unions(X+2*N,Y);
}
}
}
printf("%d\n",M);
return 0;
}

原创粉丝点击