题意:
给出一个n个点m条边的森林,每个点有一个点权,有两种操作;
1.查询两点之间的第K小的点权,保证合法;
2.连边(x,y);
m
题解:
论正确姿势的重要性;
首先询问和某道COT的题很像,而这道题中多了Link操作;
然而,那道COT的题我是用树链剖分写的。。。
一开始的脑洞是每次将小的暴力重构作为一个轻链连在大的树上,然后每隔一段时间重构一次大树;
听起来十分暴...
分类:
其他好文 时间:
2015-10-21 12:41:06
阅读次数:
207
设f[i][j]为第i张图中j点所在连通块的编号,加边时可以通过启发式合并在$O(dn\log n)$的时间内维护出来。对于每个点,设h[i]为f[j][i]的hash值,若两个点hash值相等,则它们在d张图中均连通。#includetypedef unsigned long long ll;co...
分类:
其他好文 时间:
2015-10-11 19:31:48
阅读次数:
264
BZOJ 1483 [HNOI2009]梦幻布丁 链式前向星+启发式合并...
分类:
其他好文 时间:
2015-09-29 10:01:53
阅读次数:
193
又是基于连通性的问题,可以用并查集来解决,每个集合都维护一个优先队列,合并的时候按照优先队列的大小启发式合并即可。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 7 const int N = 10...
分类:
其他好文 时间:
2015-09-03 15:22:17
阅读次数:
159
此题关键在于维护点的连通性以及连通块的信息,容易想到并查集,但是并查集却不支持删边操作,于是考虑逆序处理,这样删边就变成了加边操作,每一个连通块的信息可以用stl中的multiset来维护,注意集合合并的时候要启发式合并(这里是按照集合的大小来合并,每次小的集合合并到大的集合里),不然会超时。 1....
分类:
其他好文 时间:
2015-09-02 09:21:00
阅读次数:
175
显然资源集合处就是树的重心,这题需要动态维护树的重心。每个连通块以重心为根,用link-cut tree维护每个点的子树大小以及子树内所有点到它的距离和。合并两个连通块时,考虑启发式合并,暴力往大的树中添加叶子。添加叶子时,需要将叶子到重心路径上所有点的子树大小+1,距离和则加上一个等差数列。并且新...
分类:
其他好文 时间:
2015-09-01 21:32:19
阅读次数:
288
题意:
直线上有一排n个弹力装置,每个弹力装置会将绵羊弹到下ki个弹力装置处;
如果没有了则绵羊被弹飞。。
问每个绵羊被弹了几次弹飞;
可能会修改弹力装置的k值;
n
题解:
裸的LCT吧;
所以下面的启发式合并Splay是啥鬼;
有人说这题边有向,和无向边不一样;
然而有个卵区别,把终点作为根不就有向了吗!
反正切了上一题这一题也不难吧;
维护个size之后,把终...
分类:
其他好文 时间:
2015-08-15 18:26:26
阅读次数:
215
2809: [Apio2012]dispatchingTime Limit: 10 Sec Memory Limit: 128 MB
Submit: 1932 Solved: 967
[Submit][Status][Discuss]
Description在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿。在这个帮派里,有一名忍者被称之为 Master。除了 Ma...
每次操作实际上相当于把点到根上所有点消除。$O({n^2})$暴力显然,用trie维护每棵子树的后继局面,然后需要进行trie树异或操作和tire树合并操作。异或操作直接打标记合并操作前,类似启发式合并,先把子树较小的的标记全部下放,然后全部按照另一棵的标记转好,然后把它合并到另一颗里面去。正确性因...
分类:
其他好文 时间:
2015-06-16 20:58:57
阅读次数:
479
DescriptionN个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色.Input第一行给出N,M表示布丁的个数和好友的操作次数. 第二行N个数A1,A2...An表示第i个布丁的颜色从第三...
分类:
其他好文 时间:
2015-05-28 13:50:03
阅读次数:
120