30分求助
查看原帖
30分求助
417018
dark_moon楼主2022/8/10 08:36
#include<bits/stdc++.h>
using namespace std;
const int N = 5e4 + 5;
int n, k, fa[N * 3], t, x, y, ans;
int find(int x){
	while(x != fa[x])
	x = fa[x] = fa[fa[x]];
	return x;
}
int main(){
	scanf("%d%d", &n, &k);
	for(int i = 1; i <= n * 3; i ++)
	fa[i] = i;
	for(int i = 1; i <= k; i ++){
		scanf("%d%d%d", &t, &x, &y);
		if(x > n || y > n){
			ans ++;
			continue;
		}
		if(t == 1){
			if(find(x) == find(y + n) || find(x) == find(y + n + n)){
				ans ++;
				continue;
			}
			fa[find(x)] = find(y);
		}
		else{
			if(x == y){
				ans ++;
				continue;
			}
			if(find(x) == find(y) || find(x) == find(y + n)){
				ans ++;
				continue;
			}
			fa[find(y)] = find(x + n);
			fa[find(x)] = find(y + n + n);
		//				同类;天敌;猎物 
		}
	}
	printf("%d", ans);
	return 0;
}

不知道哪里错了

2022/8/10 08:36
加载中...