随笔分类 -  并查集

摘要:HDU - 5354 如果询问一个点的话, 直接用并查集check一下就好了。 要求n个点都求出答案的话, 用分治优化一下, 感觉挺巧妙的。 阅读全文
posted @ 2019-07-22 11:26 NotNight 阅读(129) 评论(0) 推荐(0)
摘要:HDU - 5361 直接用线段树维护最短路, 每次取出最小的去扩展。 好像还有nb的并查集写法。 阅读全文
posted @ 2019-07-17 16:21 NotNight 阅读(169) 评论(0) 推荐(0)
摘要:并查集合并的时候更新信息。注意a[ i ] 有负的。 阅读全文
posted @ 2019-07-04 20:03 NotNight 阅读(185) 评论(0) 推荐(0)
摘要:按lcp合并计算答案。 阅读全文
posted @ 2019-07-04 15:45 NotNight 阅读(227) 评论(0) 推荐(0)
摘要:Best Edge Weight 我们先找出一棵最小生成树, 对于非树边来说, 答案就是两点路径上的最大值 - 1, 这个直接倍增就能处理。 对于树边来说, 就是非树边的路径经过这条边的最小值 - 1, 这个可以用并查集压缩路径 或者 更压st表一样的方式更新。 感觉就是没想到先扣出来一个最小生成树 阅读全文
posted @ 2019-05-31 18:30 NotNight 阅读(170) 评论(0) 推荐(0)
摘要:Bipartite Checking 感觉这种题写过很多次啦。 删边很难操作, 我们把边的影响区间丢到线段树上, 就全部变成加边了。 我们用按秩合并并查集维护每个点到根的奇偶性, 合并的时候能在小的子树的根打个标记。 阅读全文
posted @ 2019-05-22 14:59 NotNight 阅读(127) 评论(0) 推荐(0)
摘要:Cinema 感觉这个题好神啊。。。 首先如果 n 比 m 大, 我们先旋转90度。 我们要加入一个(x, y)的时候, 我们枚举答案所在的行离 x 的距离 g , 然后对于x + g 行来说 我们找到(x + g, y)左边的第一个和右边的第一个未被占的位置,更新答案, 如果 g > 答案 退出。 阅读全文
posted @ 2019-05-20 00:31 NotNight 阅读(218) 评论(0) 推荐(0)
摘要:Deduction Queries 用并查集维护前缀的关系, 在同一个联通块内两两之间的异或值都是已知的。 每个点再维护一个和它当前父亲的异或值, 压缩路径的时候更新一下就好了。 阅读全文
posted @ 2019-05-16 13:55 NotNight 阅读(159) 评论(0) 推荐(0)
摘要:Extending Set of Points 我们能发现, 如果把x轴y轴看成点, 那么答案就是在各个连通块里面的x轴的个数乘以y轴的个数之和。 然后就变成了一个并查集的问题, 但是这个题目里面有撤销的操作, 所以我们要把加入和撤销操作变成 这个点影响(L , R)之间的询问, 然后把它丢到线段树 阅读全文
posted @ 2019-03-27 12:06 NotNight 阅读(428) 评论(0) 推荐(0)
摘要:Imbalance Value of a Tree 感觉这种题没啥营养, 排个序算算贡献就好啦。 阅读全文
posted @ 2019-03-05 11:14 NotNight 阅读(147) 评论(0) 推荐(0)
摘要:Dima and Trap Graph 枚举区间的左端点, 然后那些左端点比枚举的左端点小的都按右端点排序然后并查集去check 阅读全文
posted @ 2019-02-21 21:49 NotNight 阅读(149) 评论(0) 推荐(0)
摘要:C - Points, Lines and Ready-made Titles 把行列看成是图上的点, 一个点(x, y)就相当于x行 向 y列建立一条边, 我们能得出如果一个联通块是一棵树方案数是2 ^ n - 1 否则是2 ^ n。 各个联通块乘起来就是答案。 阅读全文
posted @ 2019-02-03 00:42 NotNight 阅读(161) 评论(0) 推荐(0)
摘要:D - Mr. Kitayuta's Colorful Graph 思路:我是暴力搞过去没有将答案离线,感觉将答案的离线的方法很巧妙。。 对于一个不大于sqrt(n) 的块,我们n^2暴力枚举, 对于大于sqrt(n)的块,我们暴力枚举答案。 这样就能做到严格sqrt(n) * n 阅读全文
posted @ 2018-09-13 12:11 NotNight 阅读(135) 评论(0) 推荐(0)
摘要:思路:这个题的并查集用的好NB啊, 我们把伤害看成图上的点,武器作为边,对于一个联通块来说, 如果是一棵大小为k的树,那么这个联通块里面有k - 1个伤害能被取到,如果图上有环那么k个值都能 取到,对于是一颗树的情况,我们肯定让里面最大的不取,这个用并查集维护一下,每次合并将小的 伤害合到大的伤害上 阅读全文
posted @ 2018-09-06 15:09 NotNight 阅读(120) 评论(0) 推荐(0)
摘要:我居然用暴力跑过去了。。。 思路:两个区间合成一个新的区间才会产生冲突, 我们用并查集维护前缀和, 0 - n 个节点分别表示sum[ 0 ] - sum[ n ], d[ i ] 表示 前缀i 和它的父亲的差值, 那么对于两个在同一个并查集里的来说, 就表示这个区间的值已经知道啦, check一下 阅读全文
posted @ 2018-05-20 14:32 NotNight 阅读(109) 评论(0) 推荐(0)