这怎么能挂
查看原帖
这怎么能挂
361621
Mr_LLLiao楼主2021/11/9 13:32

F*****K

#include <cstdio>
#include <cmath>
#include <iostream>
#include <vector>

using namespace std;
const int INF = 3e4 + 10;
typedef long long ll;

vector<int> size(INF, 1);
int n;
int f[INF];

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

void unionSet(int u, int v) {
	int x = find(u);
	int y = find(v);
	if (x != y) {
		f[x] = y;
		size[y] += size[x];
	} else {
		return;
	}
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> n;
	for (int i = 1; i <= INF; i ++) {
		f[i] = i;
	}
	for (int i = 1; i <= n; i ++) {
		char o;
		int u, v;
		cin >> o >> u >> v;
		if (o == 'M') {
			unionSet(u, v);
		}
		if (o == 'C') {
			if (find(u) == find(v)) {
				cout << abs(size[u] - size[v]) - 1 << endl;
			} else {
				cout << -1 << endl;
			}
		}
	}
	return 0;
}
2021/11/9 13:32
加载中...