随笔分类 -  数据结构

摘要:#[HDU-6791] 2020HDU多校第三场T1(回文自动机) 前置知识: 1.字符串的$\text$ 2.回文自动机 3.回文串与$\text$ 3.1:回文串的$\text$也是回文串 若有回文串$S$的一个$\text :T$,则$S_{1,|T|}=S_{|S|-|T|+1,|S|}=r 阅读全文
posted @ 2020-07-29 15:46 chasedeath 阅读(346) 评论(0) 推荐(0)
摘要:#「APIO2019」路灯 (K-D Tree / 树套树 / CDQ + 树状数组) 首先想到一个简单的问题转化 对于一个询问,联通的时间是若干连续的区间$[L_i,R_i]$ 所有的$L_i,R_i+1$都是关键点,即由不连通变为联通的时间 和 由联通变为不连通的时间 把答案转化为$\sum R 阅读全文
posted @ 2020-07-26 14:02 chasedeath 阅读(218) 评论(0) 推荐(0)
摘要:「APIO2018」选圆圈(K-D Tree/CDQ+Set) Part1 K-D Tree做法 K-D Tree经常用来优化大暴力。。 把圆$(x,y,r)\(视为矩形\)(x-r,y-r,x+r,y+r)\(,依据\)(x,y)$构建K-D Tree 维护K-D Tree每个节点所有矩形最小和最 阅读全文
posted @ 2020-07-26 11:28 chasedeath 阅读(235) 评论(0) 推荐(0)
摘要:堆 每个节点权值大于(小根堆)父亲的树形数据结构 以下均讨论小根堆的问题 普通二叉堆 用数组$a[1:n]$构成一棵二叉树来维护堆操作,可以做到 1.插入元素 2.查询堆顶 3.删除堆顶或者删除特定元素(需要记录权值位置) 1.插入元素 先放到$a[n+1]$的位置,然后每次与父亲比较是否交换 vo 阅读全文
posted @ 2020-07-26 08:22 chasedeath 阅读(134) 评论(0) 推荐(0)
摘要:「SDOI2017」树点涂色(LCT+线段树) 可以发现更新操作就是$\text\(的\)\text$操作,这个操作复杂度是$O(n\log n)$的 因此,考虑对于每次的$\text$操作,维护每个点到根的路径上不同的权值个数 每次$\text$操作只设计到合并两个链/断开一条链两种操作,可以通过 阅读全文
posted @ 2020-06-02 18:47 chasedeath 阅读(216) 评论(0) 推荐(0)
摘要:HDU-5869 Different GCD Subarray Query(树状数组) 先不考虑查询的区间$[L,R]$ 首先我们枚举一个$\gcd$区间的$l$,考虑不同的$\gcd(l..r)\(实际上只有\)\log n$个,因为每次改变,$\gcd$的值至少减少一倍 维护一个倍增数组,可以$ 阅读全文
posted @ 2020-05-29 22:22 chasedeath 阅读(180) 评论(0) 推荐(0)
摘要:「CTS2019 | CTSC2019」重复(Kmp) Part1 首先我们考虑对于一个已经确定的$t$串,如何检查是否合法 对于$s$串建立$\text\((\)\text$自动机当然可以), 如果当前$\text$指针$j$在$\text$树上的祖先所对应的所有下一个位置$s[ancestor+ 阅读全文
posted @ 2020-05-22 13:00 chasedeath 阅读(281) 评论(0) 推荐(0)
摘要:HDU - 5967(LCT) LCT动态维护基环内向树 将树边直接加入,对于根节点记录一个$mark$值存多出来一条边的信息 查询时找到当前树的根,然后根据$mark$值判断 #include<cstdio> #include<cctype> #include<iostream> #include 阅读全文
posted @ 2020-05-21 16:09 chasedeath 阅读(155) 评论(0) 推荐(0)
摘要:HDU - 5333 多维问题容易想到离线 从左到右,每次将$max(u,v) \leq i$的边加入,动态地用LCT维护一颗最大的生成树 每次插入如果产生环,将$min(u,v)$较大的边保留 满足最优性之后,加边删边的时,用树状数组维护边权$\geq j$的总数(即联通块减少的数量),就可以直接 阅读全文
posted @ 2020-05-21 16:07 chasedeath 阅读(129) 评论(0) 推荐(0)
摘要:HDU - 5398(LCT) 用LCT动态维护环 这题需要我们弄一些小性质 假设我们从大的数向小的数连边,那么一定是向大的数的因子连边,加入的边总数就是$n\ln$ 如果这条边已经存在,那么就要从当前产生的环上换下来,存一个最小值 这样就是$LCT$模拟连边过程,总复杂度$n \cdot \log 阅读全文
posted @ 2020-05-21 16:04 chasedeath 阅读(178) 评论(0) 推荐(0)
摘要:NOI.AC #111. 运气大战 (动态dp) 对于两个权值排序之后,可以主观意会每次选的数对保证$|i-j|\leq 2$ 网上这个都有很多,我写这篇题解只是想吐槽一下他们毫无可读性的代码以及令人完全感受不到正确性的转移。。。 对于线段树上的每个节点$[l,r]$存储一个矩阵$a[2][2]\( 阅读全文
posted @ 2020-04-25 21:12 chasedeath 阅读(207) 评论(0) 推荐(1)
摘要:yww 与树上的回文串 官方题解不是人啊,半天看不懂 首先是前置知识 Border定理,在这道题的应用就是把一个串的回文的前缀,按照长度分成$O(\log |S|)$个等差数列 分析 路径问题很常见的可以考虑点分治,问题在于如何合并两个子树里的串回文的个数 如果符合条件的串只有在一边,可以直接$df 阅读全文
posted @ 2020-04-19 19:28 chasedeath 阅读(493) 评论(0) 推荐(2)
摘要:「NOI2018」归程 (Kruskal 重构树/持久化并查集) 题意:每次查询仅通过边权$\leq k$能够到达的点中,距离根最近的 离线做法:直接并查集维护当前$\leq k$边权的情况 强制在线当然可以直接可持久化并查集 持久化并查集非常麻烦,但是我们这里不需要进行回退操作,所以不需要可持久化 阅读全文
posted @ 2020-04-18 09:21 chasedeath 阅读(129) 评论(0) 推荐(0)
摘要:CF1175E Minimal Segment Cover(并查集/倍增) (倍增做法就不讲了) 将线段$[l,r]$按照$l$排序,对于每个前缀的l就能求出最大的$r$ 当我们不断增大$r$时,当前$l$对应位置的覆盖就不能满足询问所需,就需要不断向右边寻找最优的线段完成覆盖 每次接上去一个最优的 阅读全文
posted @ 2020-02-06 10:36 chasedeath 阅读(277) 评论(0) 推荐(1)
摘要:51Nod-1469 淋漓尽致子串 (后缀自动机) 对于原串构造后缀自动机 我们只考虑$|endpos|>1$的状态 发现对于一个状态,只有其中最长的子串会产生贡献,否则会在$p_i-1$出产生冲突 对于最长串的$p_i-1$位置,如果$link/parent$树上的一个儿子的$|endpos|>1 阅读全文
posted @ 2020-01-20 11:07 chasedeath 阅读(114) 评论(0) 推荐(0)
摘要:51Node-1600 Simple KMP (后缀自动机+树剖线段树/LCT) 题面给人一种非常复杂的感觉 我们考虑每次加入一个字符,产生的每一个新的后缀的贡献 对于后缀$S_{x,i}$我们可以从$i-1$继承过来得到$S_{x,i-1}$的答案,只用考虑$i$的贡献 任意一个$S_{j,i}( 阅读全文
posted @ 2020-01-20 10:35 chasedeath 阅读(199) 评论(0) 推荐(0)
摘要:HDU-5470 Typewriter (后缀自动机优化dp) 这个$dp$有两种转移 1.\(dp[i-1]+cost[s[i]] \rightarrow dp[i]\) 2.\(dp[j]+(i-j) \cdot A+2 \cdot B \rightarrow dp[i]\) ( $s_{j+1 阅读全文
posted @ 2020-01-20 10:19 chasedeath 阅读(196) 评论(0) 推荐(1)
摘要:HDU-5343 MZL's Circle Zhou (后缀自动机) 题意:从$A,B$两串中各选出一个子串$x,y$(可以为空),求能构成的不同串的个数 为了避免重复统计,我们需要规定优先级 对于任意一个答案中的串,它的合法切分中,我们使得$|x|$最大 对于$A,B$分别构建后缀自动机 我们统计 阅读全文
posted @ 2020-01-20 10:01 chasedeath 阅读(140) 评论(0) 推荐(1)
摘要:HDU-4641 K-string (后缀自动机+线段树合并) 由于$k$是固定的,所以会比较方便 对于整个串构建后缀自动机 利用线段树合并离线求出每个点的$endpos$情况,找到第$k$个元素,那个元素以后的的位置都出现了$k$次,将它们的答案加上$len-len[link]$,最后累前缀和即可 阅读全文
posted @ 2020-01-20 09:49 chasedeath 阅读(179) 评论(0) 推荐(0)
摘要:HDU-6194 string string string(后缀自动机) 这个题用后缀自动机做真的简单 统计一下每个状态$|endpos|$是否等于$k$就能得到答案 #include<bits/stdc++.h> using namespace std; #define reg register 阅读全文
posted @ 2020-01-20 09:42 chasedeath 阅读(115) 评论(0) 推荐(0)