代码:
#include<bits/stdc++.h>
using namespace std;
int fa[2000001];
//fa[i]同类
//fa[i+n]食物
//fa[i+n+n]天敌
int find(int x){
while(x!=fa[x]){
x=fa[x];
}
return x;
}
void uin(int x,int y){
fa[find(y)]=find(x);
}
int main(){
int n,m;
int p;
cin>>n>>m;
for(int i=1;i<=n;i++){
fa[i]=i;
fa[i+n]=i;
fa[i+n+n]=i;
}
int ans=0;
int x,y;
for(int i=1;i<=m;i++){
cin>>p>>x>>y;
if(x>n||y>n){
ans++;
// cout<<1<<endl;
continue;
}
if(p==2){
if(x==y){
ans++;
// cout<<1<<endl;
continue;
}
if(find(x) == find(y) || find(x) == find(y + n)){
// cout<<find(x)<<" "<<find(y)<<" "<<find(y+n)<<endl;
// cout<<2<<endl;
ans++;
continue;
}
uin(x,y+n+n);
uin(x+n,y);
uin(x+n+n,y+n);
}
if(p==1){
if(x==y){
// cout<<0<<endl;
continue;
}
if(find(x+n)==find(y)||find(y+n)==find(x)){
ans++;
// cout<<2<<endl;
continue;
}
uin(x,y);
uin(x+n,y+n);
uin(x+n+n,y+n+n);
}
// cout<<0<<endl;
}
cout<<ans;
return 0;
}
十分,求大佬指点