
分治
CHCXCHC
这个作者很懒,什么都没留下…
展开
-
HDU 5412 CRB and Queries 求区间第k小 CDQ分治+整体二分
恩。。CDQ分治是个神奇的东西。。其思想基于分治。。可以实现大部分离线的带修改的询问 资料:http://www.cnblogs.com/zig-zag/archive/2013/04/18/3027707.html//author: CHC//First Edit Time: 2015-09-04 13:18#include <iostream>#include <cstdio>#原创 2015-09-04 16:05:45 · 1262 阅读 · 0 评论 -
POJ 1741 Tree 树 点分治
题意:给定一颗n(n<=10000)个点的带权树,问这颗树中两点最短路小于等于K的点对有多少。漆子超 的《分治算法在树的路径问题中的应用》中的例题之一。因为是无根树,每次找树的重心,以重心转换为有根树,可以防止算法从O(NlogN)O(NlogN)退化为O(n2)O(n^2),,然后求经过该点的最短路小于等于K的点对数。但是会算多,因此要减去算多的那些部分。。 代码:#include <iostr原创 2015-10-05 12:10:29 · 607 阅读 · 0 评论 -
UVALive 6258 Non-boring sequences 分治
题意:给一个长度为n的序列(n≤200000n\leq200000),判断这个序列是不是无聊序列,若该序列中的任意连续子序列中存在一个数是唯一的,也就是只出现一次,那么这个序列就是非无聊子序列。求第i个位置和它两边最近的下一个相同数的位置,对于任意长度的连续子序列[L,R][L,R],一定要有X使得pre[X]<Lpre[X] < L && next[X]>Rnext[X] > R 成立,那么就可以原创 2015-10-05 09:51:05 · 691 阅读 · 0 评论 -
UVALive 6067 Bit Magic 通过三个位运算约束求是否有解 2-sat
有如下的代码: 现在给定b[N][N],求是否存在a[N]void calculate(int a[N], int b[N][N]) { for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { if (i == j) b[i][j] = 0; else if (i % 2 == 1 &&原创 2015-10-11 09:32:45 · 703 阅读 · 0 评论 -
spoj1825 Free tour II 点分治
给一颗带权树,这颗树上每个点有一个点色 黑色或白色 现在要求经过不超过K个点的最长路径长度是多少将无根树转换为有根树,每次只考虑一个点,计算经过该点不超过K个点的最长路径长度。考虑完该点之后把该点删掉。然后从子树中再找一点。一直这样下去。每次找重心。最多有log2nlog_2 n层,然后每层跑个O(nlog2n)O(nlog_2 n)是可以接受的 要考虑到怎么计算经过该点不超过K个点的最长路径长度原创 2015-10-12 18:45:27 · 660 阅读 · 0 评论