记录编号 461771 评测结果 AAAAAAAAAA
题目名称 [NOI 2001]食物链 最终得分 100
用户昵称 GravatarJustWB 是否通过 通过
代码语言 C++ 运行时间 0.078 s
提交时间 2017-10-20 17:45:42 内存使用 4.13 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<algorithm>
const int maxn=1e6+5;
using namespace std;
inline int get();
inline void Union(int x,int y);
int find(int x);
int n,k,a,b,c,ans;
int ihateset[maxn];
int main()
{
	freopen("eat.in","r",stdin);
	freopen("eat.out","w",stdout);
	n=get(),k=get();
	for(int i=1;i<=3*n;i++)ihateset[i]=i;
	for(int i=1;i<=k;i++)
	{
		a=get(),b=get(),c=get();
		if((b>n||c>n))ans++;
		else if(a==1)
		{
			if((find(b)==find(c+n))||
			(find(b)==find(c+2*n))||
			(find(c)==find(b+n))||
			(find(c)==find(b+2*n)))ans++;
			else Union(b,c),Union(b+n,c+n),Union(b+2*n,c+2*n);
		}
		else
		{
			if((find(b)==find(c))||
			(find(b)==find(c+n))||
			(find(c)==find(b+2*n)))ans++;
			else Union(b,c+2*n),Union(b+n,c),Union(b+2*n,c+n);
		}
	}
	printf("%d\n",ans);
	return 0;
}
inline void Union(int x,int y)
{
	int t=find(x),s=find(y);
	if(t!=s)ihateset[t]=s;
}
int find(int x)
{
	if(ihateset[x]!=x)return ihateset[x]=find(ihateset[x]);
	return ihateset[x];
}
inline int get()
{
	int t=0;char c=getchar(),j=1;
	while(!isdigit(c))
		if(c=='-')j=-1,c=getchar();
		else c=getchar();
	while(isdigit(c))
		t=(t<<3)+(t<<1)+c-'0',
		c=getchar();
	return j*t;
}