并查集
文章平均质量分 73
Lazines_by
好吧,我要工作了
展开
-
并查集学习入门到熟悉
我的: 并查集就是把具有相同属性的一些事物归为一类,然后归类之后后就相当于形成了多个联通块,其中要注意的是pre数组记录的是他的上级,然而不一定是他的最上级,判断他是不是最上级的话就是他的pre值是不是等于该数本身,即pre[i] == i,其实有多少个最上级就相当于有多少个连通块。然而想要找到某个数的最上级是哪个数的话就是调用finds函数。finds函数里面有一个状态压缩算法,就是找到他的最上原创 2016-08-07 15:49:47 · 425 阅读 · 0 评论 -
并查集系列题解
CodeForces 217A题意:给一系列的点,每个点以x,y轴方向进行延伸,使得一些点成为一个集合,然后求出至少需要添加几个点使得所有的点都在一个集合里面;思路:用并查集求出现有的形成了多少个集合,然后答案就是集合数 - 1;这里的finds函数相比以前我写的比较精简一点;#includeusing原创 2016-11-08 08:25:54 · 306 阅读 · 0 评论 -
并查集巧妙用法(codeforces)C. Destroying Array
C. Destroying Array题意:对样例进行分析:,n == 4,数组是1 3 2 5,然后下一行就是每一个数就得输出,代表的是删除数组中的第几个数,然后在删除后的数组中找到分成的段的和最大。思路:当时一看到就想到了线段树,可以并不会线段树。。。后面看到大神的博客,用并查集倒着写!,高手呀;倒着写就是对第三行的数倒着操作,相当于每次都往数组中的这个位置原创 2016-10-03 17:44:29 · 492 阅读 · 0 评论 -
hdu 1829(并查集)
题意:两两配偶,其中是一男一女,问会不会出现冲突。思路:两个并查集,1 ~ n代表男,n + 1 ~ n * 2代表女。#includeusing namespace std;typedef unsigned long long ll;const int maxn = 2000 + 10;#define clr(x,y) memset(x,y,sizeof x)i原创 2017-07-14 20:39:19 · 224 阅读 · 0 评论 -
hdu3047(带权并查集)
hdu3047 ZJnu stadium题意:给出一个n,m,n表示的是有n 个人,m表示的是 有m 对关系: 接下来输入的就是这m对关系,a,b,x;表示的是a,b相距x个距离;然后判断输入的是否与这个数的上面的数信息一致, 输出不一致的数目;思路:用一个dist[ ]数组记录他到他的祖先的距离;然后对并查集合并的时候将rb的祖先赋给ra,然后就要对dist[rb]的值进原创 2016-11-03 21:08:30 · 3925 阅读 · 1 评论 -
hdu2818(带权并查集)
题意:给出编号为1 - n堆的石头堆,初始每个石头堆中都有一块石头。然后有两个操作,M x y,表示的是将x石头堆堆在y石头堆上,C x 表示的是查询x石头堆下面有多少块石头。注意如果是移动第x堆的话,和他在一起的一起移动。如果是移动到第y堆,那么直接在第y堆最上面放,原来的不变。PS:题意理解了许久许久。思路:用两个数组,d数组表示的是在这堆下面的石头有多少块,num数组原创 2017-07-24 21:22:07 · 457 阅读 · 0 评论