ggbbgg 2016-02-22 23:52:43
点我顶贴
收藏
删除
#include<cstdio>
#include<iostream>
using namespace std;
#define maxx 50001
#define con {++ans;continue;}
int n,k;
int f[3*maxx];//0~n表示同类,n+1~n*2表示食物,n*2+1~n*3表示天敌
int g(int i)
{
return (f[i]==i)?i:(f[i]=g(f[i]));
}
void h(int i,int j)
{
f[g(i)]=g(j);
}
int main()
{
scanf("%d%d",&n,&k);
int m = 3 * n;
for(int i = 1;i <= m;++i)
f[i]=i;
int a,x,y;
int ans(0);
for(int i = 0;i < k;++i)
{
scanf("%d%d%d",&a,&x,&y);
if(x > n || y > n) con
if(a==1)
{
if(g(x+n)==g(y)||g(x+2*n)==g(y)||g(x+n)==g(y+2*n)||g(x+2*n)==g(y+n)) con
h(x,y);
h(x+n,y+n);
h(x+2*n,y+2*n);
}
else
{
if(g(x)==g(y)||g(x+2*n)==g(y)) con
h(x+n,y);
h(x+2*n,y+n);
h(x,y+2*n);
}
}
printf("%d",ans);
return 0;
}