编辑
2023-10-21
数据结构与算法
00
请注意,本文编写于 567 天前,最后修改于 567 天前,其中某些信息可能已经过时。

这里的坑不少

女生是负数,数组下标有负数,所以要先变成正数,但是直接并查集会出现男生女生重合,编号相同,所以要把女生映射到+n上,这样就完美

cpp
#include <iostream> #include <vector> using namespace std; const int maxn = 500000; int father[maxn]; int find(int x) { if (father[x] != x) { father[x] = find(father[x]); } return father[x]; } void unionn(int x, int y) { int root_x = find(x); int root_y = find(y); if (root_x != root_y) { father[root_y] = root_x; } } int main() { int n, m, p, q; cin >> n >> m >> p >> q; for (int i = 1; i <= n + m; ++i) { father[i] = i; } for (int i = 1; i <= p; ++i) { int a, b; cin >> a >> b; if (find(a) != find(b)) { unionn(a, b); } } for (int i = 1; i <= q; ++i) { int a, b; cin >> a >> b; a *= -1; b *= -1; if (find(a + n) != find(b + n)) { unionn(a + n, b + n); } } int ansm = 0, ansf = 0; for (int i = 1; i <= n; ++i) { if (find(i) == find(1)) { ansm++; } } for (int i = n + 1; i <= n + m; ++i) { if (find(i) == find(n + 1)) { ansf++; } } int result = min(ansm, ansf); cout << result << endl; return 0; }

本文作者:yowayimono

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!