随笔分类 -  1并查集

摘要:考虑计算每个位置的数作为最小值时有多少种情况 方便起见,以位置为第二关键字比较大小,这样就不会出现“相同的”数 可以方便地计算出以i位置为最小值的区间端点的可行位置:[A,i],[i,B] 这是我选的一个区间,那么另一个区间会有两种情况:在[A,B]的范围内或者不在 不妨只考虑另一个区间在i这个区间 阅读全文
posted @ 2018-12-04 19:49 Ressed 阅读(213) 评论(0) 推荐(0)
摘要:并查集维护每个联通块的直径和最小的最大深度,每次连得时候连的肯定是最大深度最小的那两个点 阅读全文
posted @ 2018-11-19 21:10 Ressed 阅读(292) 评论(0) 推荐(0)
摘要:如果我们能求出来每个区间个数的最大分值,那就可以用线段树维护这个东西 然后出答案了 然后这个的求法和(luogu4269)Snow Boots G非常类似,就是我们把数大小排个序,每次都拿<=x的位置去合并那个并查集,同时维护个数和大小 阅读全文
posted @ 2018-11-09 14:31 Ressed 阅读(177) 评论(0) 推荐(0)
摘要:并查集,不仅记fa,还记与fa的距离,还记根对应的尾节点 路径压缩的时候更新那个距离就行了 阅读全文
posted @ 2018-11-01 08:42 Ressed 阅读(213) 评论(0) 推荐(0)
摘要:设s[x][i]表示从根到x的异或和在第i位上的值(0/1),(a,b,i)表示a到b的异或和在第i位上的值那么就有(a,b,i)=(s[a][i]^s[b][i]^s[lca][i]^s[lca][i])=(s[a][i]^s[b][i])也就是说,能搞出来s[a][i]和s[b][i]的相同或不 阅读全文
posted @ 2018-10-29 21:08 Ressed 阅读(264) 评论(0) 推荐(0)
摘要:先用kruskal处理出一个最小生成树 对于非树边,倍增找出两端点间的最大边权-1就是答案 对于树边,如果它能被替代,就要有一条非树边,两端点在树上的路径覆盖了这条树边,而且边权不大于这条树边 这里可以树剖来做,但是不想用.. 如果先把非树边从小到大排序然后去覆盖树边,那么一条树边只需要被覆盖一次 阅读全文
posted @ 2018-10-18 16:32 Ressed 阅读(776) 评论(0) 推荐(0)
摘要:如果给相同的位置连边,最后联通块数是n,最后答案就是$9*10^{n-1}$ 但直接连边是$O(n^2)$的 所以事先处理出一个ST表,每次O(1)地给那个ST表连边 最后再一点一点下放,就是把在这层的同一集合的的左儿子连到一个里,右儿子连到一个里 统计最下面那一层的联通块数量就行了 阅读全文
posted @ 2018-10-13 11:13 Ressed 阅读(220) 评论(0) 推荐(0)
摘要:先从大到小排序,看到哪个的时候安排不开了 给每个人拆成两个,如果x和y有矛盾,就给x和y‘、y和x’连边;如果a和b(或a'和b')在同一个集合里,说明他们一定要在同一个监狱里。 阅读全文
posted @ 2018-10-01 20:37 Ressed 阅读(198) 评论(0) 推荐(0)
摘要:类似于NOI2018d1t1的离线做法,把询问存下来,排个序,然后倒着给并查集加边,每次询问并查集联通块大小 阅读全文
posted @ 2018-09-17 14:04 Ressed 阅读(138) 评论(0) 推荐(0)
摘要:把一个点拆成三个,分别对应它的同类、它的猎物和它的天敌,这样的话(以下的相等都是并查集意义上的): 如果令a,b同类,那么a的猎物不能是b的同类,a的天敌不能是b的同类 如果令a吃b,那么a的同类不能是b的同类、a的天敌不能是b的同类。 要令a,b同类,就使(a和b)的同类、猎物、天敌分别相等 要令 阅读全文
posted @ 2018-09-13 22:47 Ressed 阅读(185) 评论(0) 推荐(0)
摘要:对于某个靴子,如果0代表某个格能走,1代表不能走,那么只要连续的1的个数的最大值>=靴子的步长,那这个靴子就不能用。 那么只要对靴子和格子都按深度排个序,然后从大到小来扫一遍(靴子越来越浅,能走的格子就越来越少,也就是相当于在增加1的个数),现在只要能维护把0变成1后,连续的1个数的最大值就行了 用 阅读全文
posted @ 2018-09-08 20:59 Ressed 阅读(227) 评论(0) 推荐(0)
摘要:并查集。 判相切或相交的时候可以两边同时平方,就不需要double和开根号了。 阅读全文
posted @ 2018-09-04 21:09 Ressed 阅读(199) 评论(0) 推荐(0)