05 2016 档案

摘要:显然做完操作2后再做操作1。 建立一个26个点的有向图,每个点只有一条出边,i->j表示i最终变成了j,边权为一开始是i,最后不是j的位置个数,如果ij,则代价还要增加c。 对于每个点贪心选取最小的出边,如果没有环,那么此时就是最优解。 否则,对 阅读全文
posted @ 2016-05-31 14:34 Claris 阅读(1394) 评论(2) 推荐(2) 编辑
摘要:对于每个点维护两棵线段树T1[x],T2[x]T1[x]维护x子树内,深度在[l,r]内的点数,同种颜色有多个的话,保留深度最小的那个。 T2[x]维护x子树内每种颜色的最小深度。 从底向上合并线段树,先合并T1,然后合并T2的时候,发现有重复点,那么在T1阅读全文
posted @ 2016-05-29 01:47 Claris 阅读(1139) 评论(2) 推荐(0) 编辑
摘要:首先剔除所有从R不可到达的点,然后用Lengauer-Tarjan算法建立出以R为起点的Dominator Tree。 那么对于每个询问,求出那些点的父亲的LCA,那么答案就是LCA到根路径上点权的最小值。 时间复杂度O(tlogn)阅读全文
posted @ 2016-05-25 14:06 Claris 阅读(428) 评论(0) 推荐(0) 编辑
摘要:外层维护权值线段树,内层维护kd-tree。 修改的时候只往右儿子里插入,不平衡的时候替罪羊式重构。 查询的时候在外层线段树上走,在内层kd-tree上查询矩形内点数即可。 时间复杂度O(qlogv(log2q+q))阅读全文
posted @ 2016-05-22 23:42 Claris 阅读(1205) 评论(1) 推荐(0) 编辑
摘要:扫描线,从左到右依次处理每棵树。 用set按时间顺序维护影响了这棵树的所有操作,那么一个点的父亲就是它前面第一个操作1。 用Splay维护树的括号序列,那么两点间的距离就是括号数量减去匹配的括号个数。 添加或删除操作0就是单点换父亲,添加或删除操作1就是区间换父亲。可以通过添加虚点来实现区间换父亲操 阅读全文
posted @ 2016-05-13 20:08 Claris 阅读(1477) 评论(0) 推荐(1) 编辑
摘要:首先将值域离散化成O(n)个连续段。 设f[i][j][k]表示第i个学校派出的数量在第j个连续段,在第j个连续段一共有k个学校的方案数。用组合数以及前缀和转移即可。 时间复杂度O(n3)阅读全文
posted @ 2016-05-11 15:09 Claris 阅读(1029) 评论(0) 推荐(2) 编辑
摘要:f[i][j]表示仅考虑[i,j]区间的答案,则 f[i][j]=min(max(f[i][k1],f[k+1][j])+a[k]),ikj 维护出max的分界点后用一堆线段树维护即可。 时间复杂度O(n2logn)阅读全文
posted @ 2016-05-09 19:14 Claris 阅读(598) 评论(0) 推荐(0) 编辑
摘要:一个长度为|S|的串在树上匹配有两种情况: 1.在LCA处转弯,那么这种情况只有O(|S|)次,暴力提取出长度为2|S|的链进行KMP即可。 2.不转弯,那么可以拆成两个到根路径的询问。 对所有串的正反串建立AC自动机,求出fail树上每个点的DFS序。 然后DFS原树,记录在AC自动机 阅读全文
posted @ 2016-05-07 02:18 Claris 阅读(1459) 评论(0) 推荐(0) 编辑
摘要:考虑反面,用状压DP求出不合法的方案数。 设f[i][j][S][x][y]表示填到了(i,j),轮廓线上每个位置作为末尾是否完全匹配第一个串的状态为S,与第一个串kmp到了x,与第二个串kmp到了y的方案数。 然后直接转移即可。 时间复杂度O(nm2mc+1c2) 阅读全文
posted @ 2016-05-02 18:16 Claris 阅读(1076) 评论(0) 推荐(2) 编辑
摘要:树的点分治,每次求出重心后,求出重心到每个点路径上的数的线性基。 对于每个询问,只需要暴力合并两个线性基即可。 时间复杂度O(60nlogn+602q)阅读全文
posted @ 2016-05-02 02:07 Claris 阅读(1537) 评论(0) 推荐(0) 编辑
摘要:建立ST表,每层维护一个并查集。 每个信息可以拆成两条长度为2的幂次的区间相等的信息,等价于ST表里两对点的合并。 然后递归合并,一旦发现已经合并过了就退出。 因为一共只会发生O(nlogn)次合并,所以时间复杂度为O(nlognα(n))阅读全文
posted @ 2016-05-01 23:38 Claris 阅读(783) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示