求救,90分,WA5号点
查看原帖
求救,90分,WA5号点
247831
CHIS_fy楼主2020/9/18 21:06

rt

#include <iostream>
#include <cstdio>
inline int read()
{
	int x=0,k=1;char c=getchar();
	while(c>'9'||c<'0'){if(x='-')k=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
	return x*k;
}
const int maxn=5e4+10;
int ans,n,k,fa[maxn*5];
int find(int x){return fa[x]==fa[fa[x]]?fa[x]:find(fa[x]);}
void unity(int x,int y){fa[find(fa[x])]=find(fa[y]);}
int main()
{
	n=read(),k=read();
	for(int i=1;i<=3*n;i++)fa[i]=i;
	while(k--)
	{
		int c,x,y;
		c=read(),x=read(),y=read();
		if(x>n||y>n){ans++;continue;		}
		if(c==1)
		{
			if(find(x+n)==find(y)||find(x+2*n)==find(y)){ans++;continue;}
			unity(x,y);unity(x+n,y+n);unity(x+2*n,y+2*n);
		}
		if(c==2)
		{
			if(x==y||find(x)==find(y)||find(2*n+x)==find(y)){ans++;continue;}
			unity(x,y+2*n);unity(x+n,y);unity(x+2*n,y+n);
		}
	}
	printf("%d\n",ans);
	return 0;
}
2020/9/18 21:06
加载中...