首页 > 代码库 > 【HDU1856】More is better(并查集基础题)
【HDU1856】More is better(并查集基础题)
裸并查集,但有二坑:
1.需要路径压缩,不写的话会TLE
2.根据题目大意,如果0组男孩合作的话,应该最大的子集元素数目为1.所以res初始化为1即可。
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <algorithm> 6 #include <numeric> 7 #include <string> 8 #include <cctype> 9 #include <cmath>10 11 #pragma comment(linker, "/STACK:102400000,102400000")12 using namespace std;13 14 const int maxn = 1e7 + 10;15 int father[maxn], ans[maxn], res;16 17 int getFather (int x) {18 if (x != father[x]) {19 father[x] = getFather (father[x]);20 }21 return father[x];22 }23 24 void Union (int p, int q) {25 int x = getFather (p);26 int y = getFather (q);27 if (x != y) {28 father[y] = x;29 ans[x] += ans[y];30 res = max (ans[x], res);31 }32 }33 34 int main () {35 int n;36 while (~scanf("%d", &n)) {37 for (int i = 0 ; i < maxn; ++ i) {38 father[i] = i;39 ans[i] = 1;40 }41 42 int x, y, MAXX = 0;43 res = 1;44 for (int i = 0 ; i < n; ++ i) {45 scanf("%d%d", &x, &y);46 Union (x, y);47 MAXX = max(x, MAXX);48 MAXX = max(y, MAXX);49 }50 51 cout << res << endl;52 }53 return 0;54 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。