并查集
YYyyCCCcccBb
觉得为时已晚的时候,恰恰是最早的时候。
展开
-
hdu3974-并查集办法
#include #include using namespace std;int father[50010];int relation[50010];int time[50010];void init(int n){ for(int i=1;i { relation[i]=-1; father[i]=i;原创 2016-08-04 14:39:17 · 331 阅读 · 0 评论 -
1163 . 最高的奖励
第一次知道并查集可以这么用思路:对于5W个数据 可以类似线段树一样,将其点作为解决途径,虽然数据范围大,但是数据量并不大。在并查集时只需要将 任务在某一时刻被解决作为入手途径。对于第一次到达的点 Fx==x-1 逐步更新到0即可#include #include #include #include #include #include #include using原创 2017-02-12 17:04:51 · 328 阅读 · 0 评论 -
CodeForces - 362D Fools and Foolproof Roads
题意:给定n个城市,m条边,要求必须增加p条路径,实现最后只有q个连通块。注意:在给出数据时加和直接加,在自己添加路径时,连通块更新的和= 连通块a + 连通快b +1 (之后的)+ 连通快a +连通块b(之前的)。真是B了狗了,这个加和没看明白WA36,怼了4个多小时#include #include #include #include using na原创 2017-03-01 21:14:17 · 410 阅读 · 0 评论 -
国王的烦恼
即便之前知道这题是并查集,而且自己还觉得并查集学的不错,还是没做出来。还以为是带权的,搞了半天。确实很有趣思路:对于此题,只需要从天数大到小判断,并连接图中节点,判断是否在某条边时,连接了两个不同的连通分支,并且在一天最多答案+1。第一次做到排序+并查集。一直以为并查集对于顺序毫无关系#include #include #include #include #incl原创 2017-02-23 20:30:03 · 450 阅读 · 0 评论 -
Dima and Trap Graph CodeForces - 366D
题意:给出节点i->n的权值区间,找到一个从1-》N的权值个数最大的连续区间。思路;将 l i 从小到大排序,贪心思想,假设我们拿到的当前节点的右侧值是结果的最右侧值,所以我们只需要维护所有r[j]>=r[i] 并且 l[j]#include #include #include #include using namespace std;int father[300原创 2017-03-08 19:11:01 · 283 阅读 · 0 评论 -
hdu-6074 Phone Call (LCA+并查集)
题意:给出若干条电话线,询问可以最多连几个房子,最小代价思路:先将轻重链划分出来,不仅仅是为了找LCA,也是为了在合并的时候以轻重链logn的特点,不断合并。划分为若干条轻重链后,用最小生成树的思想来构造,在(a,b)这个区间内,区间内自己连接,也就是找到a,b的LCA,之后合并到LCA上!c.d同理在a,b 与c,.d的关系上,只需要直接调用fa【】 合并即可。并查集合并时维原创 2017-08-04 12:07:36 · 813 阅读 · 0 评论 -
hdu 6109 数据分割(并查集+set合并)
思路:如果是相等,则看作一个集合,如果不等,则将两个集合连边。在判断的时候,如果相等的集合中操作是0,就不对;如果不等的集合操作是1,就不对#include #include #include using namespace std;const int maxn=100005;set g[maxn];int n,m;int a[maxn],b[maxn],c[maxn原创 2017-08-13 13:18:22 · 677 阅读 · 0 评论 -
HDU 5438 Ponds
题意:逐次删除掉所有与一个点相邻的点,最后询问剩下的集合中权值和思路:拓扑排序去掉所有度为1的点,之后并查集合并#include #include #include #include #include #include #include #include using namespace std;typedef long long ll;vector vec[1原创 2017-09-21 21:30:45 · 335 阅读 · 0 评论 -
Conquer a New Region HDU - 4424 (并查集)
题意:给出一个图,找到一个点,使得这个点到达图中所有其他点的流量和最大。 两点流量受到最小边权的限制.思路:之前读错题了。想了个树形DP,后来WA了几次发现不对,也没再想下去。。。其实还是挺简单的。 把所有边权从大到小排序。并查集的思想来做。如果要新加入点,那么边权必定比之前的都小,因此这个点的贡献就应该是另一棵树的节点个数*这条约束边的值+ 这个点所在树的值。最后合并到一棵树就原创 2017-09-30 12:43:11 · 178 阅读 · 0 评论 -
51nod-1535 深海探险
注意: 必须只有一个环,且是连通图思路: 并查集判一个联通分量里环的个数,再扫一遍判是否只有一个连通分量#include #include #include #include #include using namespace std;typedef long long ll;const int N=105;int fa[N];int find(int x){原创 2017-10-25 10:38:05 · 203 阅读 · 0 评论 -
CodeForces 755C PolandBall and Forest
题意:给出第I点到第p i点是最远的,询问有多少个区域。思路简单并查集一遍成!#include #include #include using namespace std;#define maxn 100005int father[maxn];int find(int x){ if(father[x]!=x) father[x]=fin原创 2017-01-16 15:07:52 · 317 阅读 · 0 评论 -
Timofey and a tree
题意:给出一棵树,N-1条边 每个边的颜色C[i]。询问是否有一个节点作为根,他所有子树的颜色都相同。比赛结束好久了,才补题。心酸。思路:当时没写出来。也是想的是并查集分类,但是搞了90分钟没出。记录下各位博客学的两种比较好的方法方法一:对于两端颜色相同的边不予以判定,而对于颜色不同的边,必定是一个端点作为根进行整合。那么只需要记录下有多少个颜色不同的特殊边,并且对于每种特原创 2017-02-04 23:34:06 · 288 阅读 · 0 评论 -
并查集--HDU 3974 Assign the task--带权
网上好多都说这是道线段树的题,然而带权并查集的思路更为简单:题意:每次给出老板与员工的关系,之后给出两个操作:1.分配任务给某个“老板”,那么他与他旗下子节点都有这个任务。每次员工都会接受新来的任务,放下手中原有任务2.查询手中的任务思路:给出relation 数组为任务,time数组为什么时候接受到某个任务#include #include using namespa原创 2016-08-10 19:17:33 · 324 阅读 · 0 评论 -
POJ 2524 Ubiquitous Religions
思路:靠左合并,将右侧的数值合并到左边。在结束后扫一遍Father数组。有几个不同的关系#include #include using namespace std;int father[50010];int relation[50010];void init(int n){ for(int i=1;i<=n;i++) { father[i]=i;原创 2016-09-13 15:27:10 · 289 阅读 · 0 评论 -
带权并查集--POJ1733
题意:给出n个数字,m段话。每段话 x,y ,op 表示从x到y有奇数 的个数为 奇数或偶数判断前几句话是对的。思路:看了kuangbin大神的博客理解了好久,才看明白。mp是为了离散化,因为数字过长,然而输入却不长,因此每次mp操作都是为新插入的数字建立一个节点,如果有则不建立find函数如普通带权并查集想法相同总结:做完此题才初步理解何种题型才可以作为带权并查原创 2016-09-01 19:11:42 · 512 阅读 · 0 评论 -
带权并查集--POJ 1988-Cube Stacking
题意:规定若干个坐标,xi ,yi 查询是否从一个点到另一个点可以连通(即距离小于d)思路:依次查找两点间距离,如果可以就合并到同一个集合中#include #include using namespace std;int father[1005];int xi[1005];int yi[1005];int d,n;int find(int x){ if原创 2016-08-15 12:00:34 · 291 阅读 · 0 评论 -
(环问题并查集)Codeforces Round #363 D Fix a Tree
思路:自己写的时候炸了好多次。没找到毛病,感觉是因为单点处理和环处理的时候没处理好。下面给AC思路在合并的时候就要时刻判断这个点 是否是个根(环的根 或者是 单点根都算)。先说一种特殊情况, 如果有单点,有环。我们需要拆环连到点上,而不能将环独立,将点连在环上。各位可以自己算算步骤,多了一步因此,打标记的时候先找是否有单点,如果没有再拆环。好了关键问题说完了,下面上代码#i原创 2016-11-07 10:47:56 · 280 阅读 · 0 评论 -
Find them, Catch them--POJ 1703带权并查集
题意:给出T个测试样例N个人 M组数据A表示查询,D表示增加关系#include #include using namespace std;int father[100050];int relation[100050];void init(int n){ for(int i=1;i { father[i]=原创 2016-08-14 11:00:55 · 283 阅读 · 0 评论 -
Codeforces Round #376 (Div. 2) C.SOCKS
C题:题意:第一行 n m k ,有n天 m只袜子 , k个颜色(然而么用)问最少改变多少只袜子的颜色 ,可以每天都双那个指定编号的袜子,并且袜子颜色相同思路:之前怎么想都不会,最后半个小时听说是并查集,也没写出来,感觉必须用vector 优化,否则硬开数组简直呵呵说下学的代码思路:建立并查集,对应每个并查集的根建立vector数组的映射。 再对于每组v原创 2016-10-17 09:34:07 · 376 阅读 · 0 评论 -
带权并查集--删除--UVA11987
题意: n个数字 m个操作 1: x y 合并 x,y 2: 将x元素移动到y元素所在的集合 3: 输出x集合中元素个数,和总和思路: 删除并查集: 并非把根节点或者子节点直接删除,而是保留。 之后将删除的元素放到数组最后进行新一轮操作。 而原值所在的集合的权在删除时原创 2016-08-16 10:46:31 · 474 阅读 · 0 评论 -
二维并查集-CodeForces 505BMr. Kitayuta's Colorful Graph
题意:给出的n个点,m条边,然后给出M条边的顶点和重点以及颜色思路:为什么都是暴力解的。第一次写二维并查集,竟然怼过了。father[z][x] 表示颜色为Z的 X的顶点的父亲节点。维护m棵树。#include #include #include #include #include #include #include using namespace std原创 2016-11-19 21:48:25 · 322 阅读 · 0 评论 -
L3-003. 社交集群
L3-003. 社交集群时间限制1000 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越在社交网络平台注册时,用户通常会输入自己的兴趣爱好,以便找到和自己兴趣相投的朋友。有部分兴趣相同的人们就形成了“社交集群”。现请你编写程序,找出所有的集群。输入格式:输入的第一行给出正整数N(<=1000),即社交网络中的用户总数(则用户从1到N编号)。随后N行,每行...原创 2018-03-17 15:19:10 · 161 阅读 · 0 评论