hdu1856】的更多相关文章

裸并查集,但有二坑: 1.需要路径压缩,不写的话会TLE 2.根据题目大意,如果0组男孩合作的话,应该最大的子集元素数目为1.所以res初始化为1即可. #include <iostream> #include <cstring> #include <cstdio> #include <cstdlib> #include <algorithm> #include <numeric> #include <string> #i…
Mr Wang wants some boys to help him with a project. Because the project is rather complex, the more boys come, the better it will be. Of course there are certain requirements. Mr Wang selected a room big enough to hold the boys. The boy who are not b…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1856 题目大意: 一个并查集 计算每个集合的元素 找出元素最多的那个集合,输出元素的个数 解题思路: 输入n=0时也应该输出1 可以用set储存每个元素,Map更新每个元素的根节点的权值 还可以用带权并查集,在合并集合的时候,合并带权的数组(该数组表示集合中的元素) set&map版: #include<bits/stdc++.h> using namespace std; int T,…
#include <cstdio> #include <cstring> #include <algorithm> #include <cstdlib> using namespace std; #define MAXN 100005 int fa[MAXN]; //父节点 int vis[MAXN]; int Min = 0xffffff; ; void init() { ; i < MAXN; i++) { fa[i] = i; } } int f…
题目大意: 老师选取2个学生对应的号码,这两人视作朋友,同时朋友的朋友也可以看成自己的朋友. 最后老师选出一个人数最多的朋友圈. 这里学生的人数不大于10^7,所以操作时需要极为注意,操作步数能省则省. 我也在超时了两次之后,不断进行代码优化才做出. 超时的部分函数代码: int getHead(int x) { while(x!=fa[x]) x=fa[x]; return x; } 后来在这个代码基础上加了int a=x;return前加一个fa[a]=x;这样在查找顶点时,同时将路径进行压…
More is better Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 327680/102400 K (Java/Others) Total Submission(s): 19011    Accepted Submission(s): 6998 Problem Description Mr Wang wants some boys to help him with a project. Because the projec…
题目链接:http://icpc.njust.edu.cn/Problem/Hdu/1856/ 题目就是要求并查集中各树的大小的最大值,我们只要在根节点处存树的大小就可以,合并也是合并根节点的数,最后扫一遍即可. 代码如下: #include<bits/stdc++.h> using namespace std; typedef unsigned int ui; typedef long long ll; typedef unsigned long long ull; #define pf p…
本文是作为上一篇文章 <并查集算法原理和改进> 的后续,焦点主要集中在一些并查集的应用上.材料主要是取自POJ,HDOJ上的一些算法练习题. 首先还是回顾和总结一下关于并查集的几个关键点: 以树作为节点的组织结构,结构的形态很是否采取优化策略有很大关系,未进行优化的树结构可能会是“畸形”树(严重不平衡,头重脚轻,退化成链表等),按尺寸(正规说法叫做秩,后文全部用秩来表示)进行平衡,同时辅以路径压缩后,树结构会高度扁平化. 虽然组织结构比较复杂,数据表示方式却十分简洁,主要采用数组作为其底层数据…