爆零求助
查看原帖
爆零求助
548203
KK_lang楼主2023/5/6 22:10

rt

#include<bits/stdc++.h>
using namespace std;

int n, m, ans;
int ft[200010];

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

void merge(int x, int y)
{
	if (find(x) == find(y)) return;
	ft[find(x)] = find(y);
}

int main()
{
	cin >> n >> m;
	for (int i = 1; i <= 3 * n; i++) ft[i] = i;
	for (int i = 1; i <= m; i++)
	{
		int op, x, y;
		cin >> op >> x >> y;
		if ((op == 2 && x == y) || x > n || y > n || find(x) == find(y)) ans++;
		else if (op == 1)
		{
			merge(x, y);
			merge(x + n, y + n);
			merge(x + 2 * n, y + 2 * n);
		}
		else
		{
			merge(x, y + n);
			merge(x + 2 * n, y);
			merge(x + n, y + 2 * n);
		}
	}
	cout << ans << endl;
	return 0;
}
2023/5/6 22:10
加载中...