SPOJ
Roll_Keyboard
这个作者很懒,什么都没留下…
展开
-
SPOJ FTOUR2 Free tour II (点分治+启发式合并)
题意:树上n个点,点有黑有白,一条路径上黑点个数不超过k个的最大权值是多少思路: 从点分治上想,我们每次统计通过某个点的,符合条件的路径最大权值,然后不停更新答案。当我们遍历完某个子树,就把这个子树的信息和之前子树合并,然后不停更新即可。很明显,我们要维护当经过黑点为x个时的最大权值。 假...原创 2018-06-17 13:49:20 · 514 阅读 · 0 评论 -
spoj PT07J Query on a tree III (主席树+dfs序)
题意:一棵树,每次查询某个子树的第k大思路: 询问子树的问题,因为子树的dfs序是连续的一个区间,所以我们将这棵树dfs地建立主席树,查询子树就是查询子树对应的区间,这样就把树变成数列了错误及反思: 其实很简单,但是spoj卡常啊,在优化了常数,vector变成链式前向星,用了快读,...原创 2018-06-12 20:40:05 · 234 阅读 · 0 评论 -
spoj cot Count on a tree (主席树)
题意:思路: 我们根据dfs顺序建立主席树。求树上第k大,对于u到v的一条路径,我们用u的树+v的树,很明显lca(u,v)多算了一次,fa[lca(u,v)]多算了两次,所以用u的树+v的树-lca(u,v)的树-fa[lca(u,v)]的树即可错误及反思:代码:#include<bits/stdc++.h>...原创 2018-06-03 13:25:19 · 226 阅读 · 0 评论 -
spoj Qtree6/bzoj 3637 Query on a tree VI(树链剖分+线段树/LCT)
题意:思路:首先,我们要开两颗线段树,一颗表示,当前节点为白时,和子树所组成的最大联通块大小是多少,另一颗表示,当前节点为黑时,和子树所组成的最大联通块大小是多少。 那么我们查询点u的答案的时候,就向上找到最远的相同颜色的点v,点v所保存的答案就是u的答案(我们v为最远同色祖先)。 更新某个点u的颜色的时候,就是把u的父亲和最远同色祖先的父亲,这一条路径上的都更新(注意,黑白各更新...原创 2018-06-03 00:29:26 · 312 阅读 · 0 评论 -
SPOJ COT2 Count on a tree II (树上莫队)
题意:思路: 树上分块方法<-由这个题,我们可以得出一种分块方法,他能保证每个块中内部移动次数,同时也能保证块的大小 这个是讲述怎么转移的因为转移的时候,lca非常麻烦,要各种分类讨论,这个博客告诉我们,只要不管lca进行转移,最后计算结果的时候临时加上lca即可错误及反思:...原创 2018-05-26 11:58:20 · 277 阅读 · 0 评论 -
SPOJ QTREE3 Query on a tree again!(树链剖分)
题意:一颗树上,每个节点只有黑和白两种状态,最初都是白,现在有两种操作,一种问[1,x]中离1最近的黑节点编号,另一种把x节点取反思路:有点巧妙的树链剖分 我们知道,树链剖分是从根向下进行标号的,那么我们就可以以1作为根,这样我们在向上爬的过程中,每次从线段树中拿到的标号必然是最优的(线段树优先向左,这一点和我们在树链剖分里面的标记方式正好吻合),这样我们不断更新ans即可错误及反思:我在代码里面原创 2018-04-20 22:17:41 · 189 阅读 · 0 评论 -
SPOJ QTREE2 Query on a tree II (倍增LCA)
题意:一颗树上,两种操作,一种问两点的距离,另一个问路上第k个节点编号思路:距离可以很简单地求,求第k个节点编号,我们可以把路径切成两段,一段是u到LCA,一段是LCA到v,那么我们看一下k属于哪一段,就能用常规的倍增去求那个点了错误及反思:代码:#include<bits/stdc++.h>#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1usi原创 2018-04-20 20:34:01 · 202 阅读 · 0 评论 -
SPOJ GRASSPLA Grass Planting(树链剖分)
题意:一棵树,有m次操作,每次给u,v图色或者查询u,v之间一共被涂了几次思路:树链剖分的基础题,对于每次查询和涂色,都按照正常的错做来就行了,一点一点根据链来往上爬,更新线段树即可。错误及反思:因为懒,有一部分代码沿用了上个题,结果疯狂TLE和WA,只能说不能偷懒啊,不过中途确实把很多东西重新想了好几遍,还是很不错的代码:#include#include#in原创 2018-01-27 13:46:20 · 352 阅读 · 0 评论 -
SPOJ QTREE Query on a tree(树链剖分)
题意:给你一棵树,然后查询点u到v之间的最大值,并且中途可能会修改某个边的值思路:http://blog.sina.com.cn/s/blog_6974c8b20100zc61.html ↑这里树剖讲的很好 树剖基本题,没什么坑点但是写的时候,对于点的上下关系经常判断错,导致wa了一上午。树剖整体思路就是将树的边进行划分,最终达到类似倍增那样的不断跳跃来节省时间,同时把树按边转化为线性,这样就能原创 2018-01-25 15:26:30 · 256 阅读 · 0 评论 -
SPOJ SUBST1 New Distinct Substrings(后缀数组)
题意:一个字符串有多少个不同的字串思路:题意与思路和 SPOJ DISUBSTR完全相同,唯一不同是数据范围,用后缀数组复杂度完全够,注意下long long 即可错误及反思:代码:#include<bits/stdc++.h>using namespace std;const int N=50000+10;int sa[N],rak[N],height[N];char s[N];void原创 2017-11-08 21:31:23 · 232 阅读 · 0 评论 -
SPOJ DISUBSTR Distinct Substrings(后缀数组)
题意:一个字符串有多少个不同的字串思路:一个字符串共有n∗(n+1)2\frac{ n*(n+1) }{2}个,减去所有的height数组的值,就是减去了所有重复的子串错误及反思:代码:#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N = 1010;char arr[N];原创 2017-11-08 21:43:53 · 281 阅读 · 0 评论 -
spoj GSS4 Can you answer these queries IV (线段树)
题意:思路: 套路题,因为在根号几次以后,继续根号就没有意义了,利用这一点就能AC了错误及反思:代码:#include<bits/stdc++.h>using namespace std;#define lson l,m,rt<<1#define rson m+1,r...原创 2018-07-24 15:30:17 · 437 阅读 · 0 评论