90pts玄关求调 WA点5
查看原帖
90pts玄关求调 WA点5
388602
CA_FZZSL楼主2024/10/24 13:04
#include<bits/stdc++.h>
#define int long long
#define MAXN 100010
using namespace std;

inline void read(int &a){
	bool w = false; a = 0;
	char c = getchar();
	while(c<'0'||c>'9'){if(c='-')w=true;c=getchar();}
	while(c>='0'&&c<='9'){a=(a<<3)+(a<<1)+(c^48);c=getchar();}
	if(w) a = -a;
}

int n,k,ans = 0;
int pre[MAXN*3];

int find(int x){
	if(!pre[x]) return x;
	return pre[x] = find(pre[x]);
}

void unionn(int x,int y){
	x = find(x);
	y = find(y);
	if(x != y) pre[y] = x;
}

signed main(){
	
	read(n);
	read(k);
	int op,x,y;
	while(k--){
		read(op);
		read(x);
		read(y);
		if(x>n||y>n){
			ans++;
			continue;
		}
		int xb = n+x;
		int yb = n+y; //b -> enemy
		int xc = 2*n+x;
		int yc = 2*n+y; //c -> food
		if(op == 1){
			if(find(xb)!=find(y) && find(yb)!=find(x) && find(xc)!=find(y) && find(yc)!=find(x)){
				unionn(x,y);
				unionn(xb,yb);
				unionn(xc,yc);
			}else ans++;
		}
		else if(op == 2){
			if(find(x)!=find(y) && find(xb)!=find(y) && find(xc)!=find(yb) && find(xc)!=find(yc)){
				unionn(x,yb);
				unionn(y,xc);
				unionn(xb,yc);
			}else ans++;
		}
	}
	
	printf("%lld",ans);
	return 0;
}
2024/10/24 13:04
加载中...