P2024 MLE!!
  • 板块学术版
  • 楼主FChang
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/10/13 19:55
  • 上次更新2023/11/2 14:04:59
查看原帖
P2024 MLE!!
744853
FChang楼主2023/10/13 19:55

大佬求助::

#include<bits/stdc++.h>
#define N 50009
using namespace std;
int n, k, ans;
int x, y, p;
int fa[2 * N];
int find(int x) {
	if (fa[x] == x) return x;
	return fa[x] = find(fa[x]);
}
void merge(int a, int b) {
	a = find(a);
	b = find(b);
	if (fa[a] > fa[b]) fa[b] = a;
	else {
		fa[a] = b;
		fa[b] += (fa[a] == fa[y]);
	}
}
int main() {
	ios::sync_with_stdio(0);
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> k;
	for (int i = 1; i <= 2 * n; i++) fa[i] = i;
	for (int i = 1; i <= k; i++) {
		cin >> p >> x >> y;
		if (x > n || y > n) ans++;
		else if (x == y && p == 2) ans++;
		else if (p == 1) {
			if (fa[min(x, y)] == fa[max(x, y) + n]) ans++;
			else merge(x, y);
		} else if (p == 2) {
			if (find(x) == find(y)) ans++;
			else merge(min(x, y), max(x, y) + n);
		}
		//	cout << ans << "\n";
	}
	cout << ans;
	return 0;
}

qwq

2023/10/13 19:55
加载中...