合并集合—并查集模板

合并集合—并查集模板_第1张图片

 

输入样例:

4 5
M 1 2
M 3 4
Q 1 2
Q 1 3
Q 3 4

输出样例:

Yes
No
Yes

 

#include
using namespace std;
const int N = 1e6 + 10;
int p[N];
int find(int x) {
	if (p[x] != x)p[x] = find(p[x]);
	return p[x];
}
int main() {
	int tt,n;
	cin >> n>>tt;
	for (int i = 1;i <= n;i++) {
		p[i] = i;
	}
	while (tt--) {
		char op;int a, b;
		cin >> op >> a >> b;
		if (op == 'M') {
			if (find(a) == find(b)) {
				continue;
			}
			p[find(a)] = find(b);
		}
		else if (op == 'Q') {
			if (find(a) == find(b)) {
				cout << "Yes" << endl;
			}
			else cout << "No" << endl;
		}
	}
	return 0;
}

你可能感兴趣的:(ou_fan的学习记录,算法,c++,数据结构)