30分求助(不是带权并查集)
查看原帖
30分求助(不是带权并查集)
561949
syr1125楼主2024/3/16 20:03
#include <bits/stdc++.h>
using namespace std;

int f[150005];
int n, k;

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

int main()
{
	cin >> n >> k;
	
	int ans = 0;
	for (int i = 1; i <= 3 * n; i ++) f[i] = i;
	for (int i = 1; i <= k; i ++)
	{
		int x, y, z;
		cin >> z >> x >> y;
		if (x > n || y > n || z > 2)
		{
			ans ++;
			//cout << i << endl;
			continue;
		}
		if (z == 1)
		{
			if (find(f[x]) == find(f[n + y]) || find(f[n + x]) == find(f[2 * n + y]) || find(f[2 * n + y]) == find(y))
			{
				ans ++;
				//cout << i << endl;
			}
			else
			{
				f[find(x)] = find(y);
				f[find(n + x)] = find(n + y);
				f[find(2 * n + x)] = find(2 * n + y);
			}
		}
		else
		{
			if (find(f[x]) == find(f[y]) || find(f[n + x]) == find(f[n + y]) || find(f[2 * n + x]) == find(f[2 * n + y]))
			{
				ans ++;
				//cout << i << endl;
			}
			else
			{
				f[find(x)] = find(n + y);
				f[find(n + x)] = find(2 * n + y);
				f[find(2 * n + x)] = find(y);
			}
		}
	} 
	
	cout << ans << endl;
	return 0;
}

AC 1、3、9

2024/3/16 20:03
加载中...