12 2019 档案
摘要:"题意" 我用了线段树套平衡树(Splay)去做。 分别说每一问: 第一问:求一个数区间排名: 我们求出区间内 小于这个数 的个数,加即可。 第二问:求区间第K大: 我们显然不能在个平衡树上求这个东西,于是我们在外面二分答案,之后判断其排名与的关系即可。 第三问
阅读全文
摘要:假设我们现在要多项式除法并且取模,就会很难受了,因为它用的是复数,并且还有精度差。 这时我们需要一个能替代单位复根的东西:原根。 一、为什么原根能替代单位复根 考虑为什么单位复根能用来做,因为它有很多性质,而我们会发现原根也具有这些性质: 以下的都为的正整数次幂。 设
阅读全文
摘要:"题意" ~~真是神题。~~ 题中要求三元环数最多,不妨反着考虑。我们先从个里面选个,有种方案,之后我们考虑选出的这些方案中最少有几个不能构成三元环。 考虑三个点不会构成三元环的情况,从入度与出度上考虑,必定是一个点入读和出度都为,一个点入度为出度为,一个
阅读全文
摘要:题意 首先将棋盘黑白染色,要使得棋盘不漏水,当且仅当每个黑点的各个方向的管口都连接上了一个白点的管口。换句话说,我们要让黑点和白点匹配数最大的同时操作次数最小,不难想到最小费用最大流。 对于一条边的描述表示容量为,费用为。 我们将每个点拆成上下左右四个点,从源点向黑点的所有
阅读全文
摘要:"题意" 看见配对数最多,想到这是最大流。看到代价,想到这是最大费用流。 于是这题是最大费用最大流。 ~~做完了,撒花!~~ 我们发现这题没有明显的组别之分,也就是说我们并不知道建图时谁连源点谁连汇点。 再次观察题中给出的配对的条件:是的倍数且满足$\frac{a_i}{a_j}
阅读全文
摘要:"模板题" 承接 "有源汇有上下界最大流" 说。 这个和有源汇有上下界最大流的思路是相同的,我们只需要求出一个可行流,考虑最多能退回去多少流,于是我们从向跑一遍最大流,减去即可。 code(只改了最大流代码的一行):
阅读全文
摘要:"模板题" 设为给出的源汇点,是虚拟的源汇点。 首先先转化成无源汇可行流: 从向连一条容量为的边,这样无论从向流多少,都能流回去,保证是循环流。 现在我们求出了一个可行流,这个可行流的流量就是的反边的流量。 我们再将$e
阅读全文
摘要:"模板题" 记第条边的下界为,上界为。 我们先让每条边流下界的流量,即将每条边的容量设为,下界为,现在我们能满足下界的要求了,但是流量是不守恒的。 建虚拟源点和汇点。 我们记每个点的入流量为,出流量
阅读全文
摘要:"题意" 这题主要要处理两个限制: 1.最多有个人,即最多条路径。 2.每个点的经过次数是给定的,为。 其中2.可以用限定上下界的方法解决,1.在建图中讲。 建图: 新建三个点:,,,将每个点拆成入点和出点。 1.从
阅读全文
摘要:"题意" 第一问没什么好说的,就是个最大流。 第二问我们考虑怎么处理费用和增大的限制。 费用: 每条边重新建一遍,带上费用就好了。 增大: 我们可以利用残余网络,新建虚拟源点,从向连容量为费用为的边,这样我们从S再跑一遍最小费用最大流即可。 code:
阅读全文
摘要:"题意" 获得一条边的价值必须选上两点,这一看就是最大权闭合子图。 先将所有价值选上。 从向每个用户连容量为的边,从每个中转站向汇点连容量为的边,对于每个用户从向和连容量为的边。 之后跑最小割,用答案减去即可。 c
阅读全文
摘要:"题意" 这道题的难点主要在于处理一个人可以对区间产生贡献这个限制。 我们之前都是将一个人当成流量,但是这一容量的流量可以对一个区间的点产生贡献,这就导致这个问题无法处理。 于是考虑怎么将一个点可以对一个区间产生贡献在图上表示出来: 我们考虑每一天,从向连容量为的边,从向
阅读全文
摘要:"题意" 看见这个式子就知道应该分数规划了。 从向每个男生连容量为费用为的边,从没个女生向连容量为费用为的边。 二分答案。 对于点对,是男生,是女生,从向连容量为费用为$a_{i,j} mid b
阅读全文
摘要:"题意" 前置知识:最小割树,不会去 "模板" 学学。 会了模板这题就很裸了,直接就最小割树,求有多少种不同的边权即可。 code:
阅读全文
摘要:"题意" 首先贪心地想必定是中间有一道分割线,上面是全是,下面全是,发现这实际上就是最小割。 我们直接最小割显然会超时,于是平面图转对偶图求最短路。 转对偶图: 所有方向的边的逆时针旋转度,建议自己模拟,这里只给一个西东方向的图。 code:
阅读全文
摘要:"题意" 首先考虑限制: 1.每个点只能走一次。 2.每条边从编号小的走向边号大的,必定是个。 3.我们可以随时用一定花费跳跃到另一个点上。 我们发现最后答案必定是这样的: 跳到一个点,走一段,再跳一段,再走一段,如此往复。 于是我们可以将这个过程理解为选几条路径覆盖所有点的问题。 我们将
阅读全文
摘要:"题意" 这题是 "P2053 [SCOI2007]修车" 的增强版。 我们直接跳过建图,说优化,建图见我的 "这篇博客" 。 我们发现边数+点数很大,将所有边和点都建出来肯定会超时,因此我们用网络流动态开点的思想解决。 先只建做倒数第一道菜的点,之后我们跑最大流,记下所有满流的厨师点,对于这些点我
阅读全文
摘要:本篇篇幅过长,可能会出不少错,我已经查过一遍了,如果还有错恳请提出,我马上修改。 "题意" 这题有两种做法: 根据套路,先将所有愉悦值加上,之后减去最小代价。 1. 首先套路地,从源点向每个点连选文科的价值,从每个点向汇点连选理科的价值,割那条表示不选哪科,这样可以保证每个人不选文就选理
阅读全文
摘要:"题意" 说一下我对朱刘算法的理解: 首先我们考虑树形图的性质:每个点除了根节以外都含有一条入边。 因此我们可以有一个贪心的想法:对每个点(除了根节点)找到一条最短的入边,但是这样会出现环,如下图: 我们会找到这个环。 根据贪心的思想,我们最终的答案必定含有这个环去掉一条边,于是我们将
阅读全文
摘要:"题意" 待修莫队与树上莫队合并起来的练手题。 code:
阅读全文
摘要:"题意" 这题加深了我对最小割的理解 先跑最大流,求出残留网络,对残留网络进行求SCC 源点和汇点显然不在同一个SCC中,不然就有增广路了 考虑每一条边 要成为最小割的边首先要满流(参见最大流最小割定理的推论) 1.如果u和源点在一个scc中,v和汇点在一个SCC中那么这条边是必须边
阅读全文
摘要:"题意" 带修莫队与普通莫队的区别在于加入了一个时间轴,具体可以看 "这篇博客" 。 另外,这是卡常神题。 code:
阅读全文
摘要:"题意" 今天发生了一个叫nofind的蒟蒻因为while写成if调了一下午的故事。 首先考虑这两个限制: 1.这个子串。 2.在这些字符串中。 我们先对所有的建出一个广义后缀自动机,不会广义后缀自动机的出门左转 "这道题" 。 先考虑第二个限
阅读全文
摘要:"题意" 我们将所有姓名串和点名串拼在一起,中间用原串中不会出现的数隔开,对每个点记录它是哪个串的。 先考虑第一问: 考虑如果点名串是某个姓名串的子串,则必定和的一个后缀的为的长度,即:。 对于一个
阅读全文
摘要:"题意" 如果对一个数操作次,那么这个数会变成,其中有个。 根据 "P4139 上帝与集合的正确用法" 这道题,我们可以知道一个数不断变为自己的欧拉函数,大约次就会变成1,而任何数模都是,于是我们可以用势能线段树解决。 因
阅读全文
摘要:"题意" 由于这是个,我们考虑拓朴排序,求某个点能到的和能到它的点,这是两个问题,我们可以正反两边拓朴排序,这样就只用考虑它能到的点了 设表示能到的点数能到的点数 如果在拓朴排序的过程中: ,显然当前队首能到达剩下的所有点,中途
阅读全文
摘要:"题意" 这题上来很容易想去求最小的拓扑序,即将队列换成堆的做法。 然而题目要求小的数 尽量 靠前,我们就拿样例的第三个说: 字典序最小: 正解: 因为正解中比字典序最小拓扑序的更靠前($3 using namespace std; const int maxn=1
阅读全文
摘要:"题意" 考虑分治(这是套路,想不到只能说做题少~~别打我~~)。 对于当前区间: 我们先判断区间长度是否为,为只需要特判当前这个数是不是就可以了。 否则我们找到区间最大值位置,这个可以用表。之后我们统计过的所有,之后递归
阅读全文
摘要:"题意" 显然先把塞进中,之后处理每个询问。 对于一个询问,我们自然不能枚举所有的循环串,于是我们考虑在匹配的过程中删去首字符,加入尾字符。 先匹配好,求一波答案。之后开始删一个首字符,加一个尾字符,之后再统计,直到所有串统计完。 维护当前在哪个节点和匹配的长度。
阅读全文
摘要:"题意" 晚上不想做题了,随便刷水题,结果看见了这题。 第一眼:这不是搜索吗。。。水题。 敲完:额,我怎么T成90了。 于是看了题解。 根据约数和定理,我们肯定要搜索所有小于的质因数的指数,对于大于的要特判。~~于是就T了。~~ 题解中的做法是这样的: 还是搜
阅读全文
摘要:"题意" 真是道回文自动机好题。 首先考虑答案必定是一个回文串+剩余部分的形式,因此可以建出回文自动机,之后考虑每个长度为偶数的回文串。 对于一个长度为偶数的回文串,设它在回文自动机上对应的节点为,我们对于每个求出表示x的最长后缀回文串,满足$len_{trans_x}
阅读全文
摘要:题意: "做法来自" 首先竞赛图缩点后是一条链,号节点在开头的那个中,因此从号节点出发的最长链即为号节点所在的的大小号节点拓扑序之后的所有的大小之和。 设表示个点的竞赛图数量,显然有$f_i=2^{\frac{n (n 1)}{
阅读全文
摘要:"题意" 这个DP状态有点神。 首先考虑一个最暴力的状态:表示第一个选了个,第二个选了个,第一个结尾为,第二个结尾为是否可行。 现在考虑消减状态: 1.首先知道了处理到第几个,那么只要知道一个长度就能推出另一个。 因此状态可以改为$f_{i,j,k,
阅读全文
摘要:题意: 这题显然直接tarjan是做不了的。 这里安利另一个求SCC的算法Kosaraju,学习的话可以见 "这篇博客" 于是结合莫队,我们有了个暴力。 发现主要瓶颈是dfs过程中找最小的未经过的点,我们用bitset优化一下就过了。 注意有重边,不能直接在biset中删除,要开个邻接矩阵判一下。
阅读全文
摘要:"题意" 回滚莫队见 "这篇博客" 需要注意一个细节,写在代码注释里了。 code:
阅读全文
摘要:"题意" 关于回滚莫队见 "这篇博客" 。 code:
阅读全文
摘要:"题意" 这题很难想到用莫队去做,因为第一印象是这个没办法O(1)移动指针。 考虑从移动到 (从移动到同理)。 我们用ST表找到的最小值的位置,考虑新加入的r+1会产生哪些贡献:显然是很多以$r+
阅读全文
摘要:"题意" 关于回文自动机的讲解见 "这里" 由于回文串个数是的,直接回文自动机上统计并比较即可。 code:
阅读全文
摘要:"题意" 不妨先考虑的情况: 这时我们要求的其实是的本质不同的公共子串数量。 首先对建一个后缀自动机,同时对于每个,我们也建一个自动机。 根据后缀自动机的性质,后缀自动机的所有节点的代表的字符串的集合代表了的全部子串,因此我们可以考虑后缀自动机
阅读全文
摘要:"题意" 学习了广义后缀自动机。 广义后缀自动机与普通后缀自动机的区别在于它是对多个串建的,于是可以处理多个串。 广义后缀自动机和普通后缀自动机的区别在于两个特判,可以见 "这篇题解" 对于这题,因为叶子数量小于20,以每个叶子为根跑dfs,将跑到的字符串插入SAM即可,求不同子串个数是SAM的常规
阅读全文
摘要:"题意" 显然加上一个数相等就是差分数组相等,于是问题变为求几个串的最长公共子串。 这里我学习了如何用SA求LCS。 首先问题要转化成求一些后缀的最长公共前缀,要求这些后缀分属不同的串。 于是二分答案,于是问题就变成求一段连续的数组,它们都,并且至少分属
阅读全文
摘要:"题意" 显然是贪心。 先建出SAM,之后能走相同的字符就走相同的字符,实在不行再走一个比它大的。 考虑怎么处理的限制,我们只要用线段树合并维护出每个点的endpos集合,到时候判断下走这一步是否合法即可。 code:
阅读全文
摘要:"题意" 考虑第一问所求即为该串对应的节点的子树内终止节点的个数,而插入一个字符相当于在新增节点到根节点的链+1,于是用LCT维护。 code:
阅读全文
摘要:"题意" 因为一个相似必定为相似,对于一个为后缀对,我们只用把它的贡献加在的答案上,最后求一个后缀和和后缀max就可以得到答案。 考虑如何快速计算后缀对的贡献: 因为后缀对的是$min_{k=i+1
阅读全文
摘要:"题意" 承接 "上篇题解" 考虑两个后缀的是什么,是将串反着插入后缀自动机后两个前缀(终止节点)的!!!于是可以在parent tree上DP了。 比后缀数组又简单又好写跑的还快。 code:
阅读全文
摘要:"题意" 考虑将和接在一起求出相同子串个数,再求出自己匹配的相同子串个数和自己匹配的相同子串个数减去即可。 如何求相同子串个数: 我们知道子串的集合即所有后缀的前缀集合,于是实际上答案就是: $\sum\limits_{i=1}^n\sum\limits_{j=i+1
阅读全文
摘要:"题意" 考虑式子前面那段其实是,因为每个后缀出现了次,后缀总长为。 现在考虑后面怎么求: $\sum\limits_{i=1}^{n}\sum\limits_{j=i+1}^nlcp(sa_i,sa_
阅读全文
摘要:关于SAM的介绍和构建见这几篇博客,这里主要是SAM的应用以及题目: "OI wiki" "洛谷日报" 应用: 1.求一个串出现次数 "模板题" 利用parent tree的性质,将每个叶子(其实就是所有前缀)的size设为1,一个点内所有串的出现次数即为子树内size大小(即叶子个数)。 正确性:
阅读全文
摘要:"题意" 第一问有一个经典做法: "学习笔记" 对于第二问,其实就是对于一个状态的所有串,第一问看成一个,第二问看成多个。 code:
阅读全文
摘要:"题意" 所谓线段树分裂其实是本题的在线做法。 考虑如果我们有一个已经排好序的区间的权值线段树,那么就可以通过线段树上二分的方法得到第个数是谁。 于是用set维护每个升序/降序区间的左右端点以及对应的线段树根节点,区间排序就将区间拆出来,并将对应的线段树也拆出来。 拆线段树就是将前k个值建一棵
阅读全文
摘要:"题意" 这题的思路实在巧妙。 首先我们肯定无法对区间进行sort,那么考虑如何使得sort简化。 问:如果给的序列是一个0 1序列,让你区间排序,那么怎么做? 答:建一颗线段树维护sum,求出当前区间中1的数目(query)cnt,之后(以升序排序为例)[l,cnt]都赋值为1,[cnt+1,r]
阅读全文
摘要:"题意" 考虑点分治,每次处理过重心的询问(即两点在重心的不同子树中)。 求出每个点到重心的线性基,之后对过重心的询问合并两点线性基求解。 code:
阅读全文
摘要:"题意" 线性基套上树上倍增即可,注意边界。 code:
阅读全文
摘要:"题意" 前置题目: "P4151 [WC2011]最大XOR和路径" 线段树分治维护边集,用可撤销的并查集维护生成树和每个点到根的异或和,线性基查最小值。 code:
阅读全文
摘要:"题意" 神仙哈希做法。 随便找个生成树,给每个非树边赋一个值,树边的值为所有覆盖它的边的值得异或和。 删去边集使得图不联通当且即当边集存在一个子集异或和为0,可以用线性基。 ~~证明的话好像画个图挺显然的~~ upd: 找到了一份 "详细的证明" code:
阅读全文
摘要:"题意" 这题有点神啊。 首先考虑注意这句话: 也就是说如果出现下面的情况: 我们可以通过异或上这个环的权值而不异或上,于是这启示我们答案必定是 一条链带上好几个环 。 现在考虑选哪条到链: 其实任意选一条即可,见下图: 假设我们选了红的那条,而答案是选蓝色的那条,那么显然可以通过
阅读全文
摘要:"题意" 一个图是二分图当且仅当不存在长度为奇数的环。 先假设边只会出现不会消失: 对于新出现的边,假如原来不联通,那么连上也不会出现环,现在考虑联通: 假如之间的长度为偶数,那么必定出现奇环,否则直接无视这条边,因为假设之后有一条边能和这条边(长为1,是
阅读全文
摘要:"题意" 显然商店编号的限制能用可持久化trie解决。 特殊的商品预先判掉就好了,现在只考虑普通的商品。 发现商品的时间是单点,询问时一段时间,于是将询问区间在线段树上拆成个区间,分别放上该询问。 之后dfs整颗线段树,先计算当前节点上的询问,之后将商品按照出现时间是在中点左右分成两类递归
阅读全文
摘要:"题意" 考虑一个操作会对一段时间内的询问产生影响,于是将线段树上的这段时间打上乘这个数的标记,最后dfs整颗线段树。 code:
阅读全文
摘要:upd 2019.12.10 latex和markdown化 "题意" 解析: 先考虑暴力:将每个区间求出来,放进一个堆里,取出前k个就是答案。 期望得分:20,原因:TLE code(对,我真写了):
阅读全文
摘要:"题意" 类似 "超级钢琴" ,找最优解用可持久化trie。 code:
阅读全文
摘要:"题意" 我理解的动态DP: 发现DP可以写成矩阵的形式,因此用数据结构维护矩阵乘积。 对于这道题,显然有DP: 表示的子树中,x选/不选的最大点独立集。 $f_{x,0}=\sum\limits_{y\in son_x}\max(f_{y,0},f_{y,1}),f_{
阅读全文
摘要:"题意" 李超树裸题,注意一开始截距是。 code:
阅读全文
摘要:"题意" 李超树板子题。 对每个区间维护该区间中点的最优线段。 插入一个线段: 求出这个线段的斜率和截距,注意特判无斜率的情况,得到。 之后开始在线段树上插入,假设当前节点区间为包含在插入区间内,那么比较插入的线段与当前维护的线段,分类
阅读全文
摘要:"题意" 暴力自然是模拟,考虑优化下模拟的过程。 我们对每个点开个左偏树,初始为在该点的骑士,之后dfs过程当中从儿子向父亲合并,同时弹出小于当前点的骑士,增加当前点的答。对于每个骑士的答案,我们记录他的起始点和终点即可。 code:
阅读全文
摘要:"题意" 考虑整体二分。 考虑路径被路径包含需要满足什么条件: 设表示的序,,即子树最后一个的序。 我们钦定$dfn_x using namespace std; define re re
阅读全文
摘要:"题意" 建出最短路图(DAG)之后就跟这题 "一样" 了。 code:
阅读全文
摘要:"题意" 这题思路好奇怪啊 见到有向无环图显然是要拓朴排序,不妨按照被吃向吃连边,那么灭绝当且仅当x的入点都灭绝,于是考虑怎样x的入点都灭绝 比如4号节点,它灭绝当且仅当2和3灭绝,2和3灭绝当且仅当1灭绝,我们发现1是2和3的lca 于是得出这样一个做法:将每个点和灭绝后能灭绝的
阅读全文
摘要:"题意" 建出虚树DP。 设表示i的子树的第一问答案,表示的子树中到最近的关键点,表示的子树中到i距离最远的关键点,表示子树中的关键点个数。 $f[x]=\sum\limits_{y\in\ son_x}f[y
阅读全文
摘要:"题意" 看见数据范围就知道是虚树,于是先建出虚树。 考虑先求出虚树上的点的管理点,显然两边dfs,一遍从下往上,一遍从上往下。 之后考虑不在虚树上的点,对于虚树上的每一条边,我们考虑上面未出现在虚树上的点的个数是多少,显然是包含的儿子的子树的大小减去子树的大小
阅读全文
摘要:"题意" 显然是虚树。 建出虚树后就可以跑DP了。 设表示的子树内需要选几个点。 如果一个点的子树中有选中点(注意不是关键点,因为关键点中有lca)就标记为1。 之后对当前点分类讨论: 1.当前点是选中点:显然儿子中子树内有选中点的都要删去 2.当前点不是选中点:如果儿子中子
阅读全文