我把结果-1后来50分,不减一后来50分?
查看原帖
我把结果-1后来50分,不减一后来50分?
194790
祸榊__楼主2020/10/17 15:10
#include<cstdio>
#include<cstring>
#define li(i,j,k) for(int i=j ; i<=k ; i++)
#define si(i,j,k) for(int i=j ; i>=k ; i--)
int n,k;
int ans=0;
int fa[150001];
int get_root(int x){
	if(fa[x]==x)return x;
	else fa[x]=get_root(fa[x]);
	return fa[x];
}
void unity(int a,int b){
	a=get_root(a),b=get_root(b);
	fa[a]=b;
	return ;
}
int main(){
	scanf("%d%d",&n,&k);
	li(i,1,n*3)fa[i]=i;
	li(i,1,k){
		int a,x,y;
		scanf("%d%d%d",&a,&x,&y);
		if(x>n || y>n){
			ans++;
			continue;
		}
		if(x==y){
			ans++;
			continue;
		}
		if(a==1){
			if(get_root(x+n)==get_root(y) || get_root(x+2*n)==get_root(y)){
				ans++;
				continue;
			}
			unity(x,y),unity(x+n,y+n),unity(x+n*2,y+n*2);
		}
		if(a==2){
			if(get_root(x)==get_root(y) || get_root(x+n*2)==get_root(y)){
				ans++;
				continue;
			}
			unity(x,y+n*2),unity(x+n,y),unity(x+n*2,y+n);
		}
	}
	printf("%d\n",ans-1);
	return 0;
}
2020/10/17 15:10
加载中...