思想
dinlon
这个作者很懒,什么都没留下…
展开
-
CF1284F New Year and Social Network(归纳法/倍增/并查集)
CF1284F New Year and Social Network给定两棵n个点的树,然后要求从T1上删掉某一条边之后从T2上找一条边替换后使得T1仍然是一颗树,将这样的边视作匹配,求解最大匹配。首先大胆猜测存在完美匹配,然后考虑利用归纳法证明,我们对E(T1)−E(T2)=e∈T1∩e∉T2E(T_1)-E(T_2)=e\in{T_1}\cap e\notin{T_2}E(T1)−E(T2)=e∈T1∩e∈/T2这个集合的大小进行归纳,当集合大小为0时显然两个树相同,然后可以每次找到原创 2021-03-02 22:32:23 · 59 阅读 · 0 评论 -
AT2675 [AGC018F] Two Trees(欧拉回路)
AT2675 [AGC018F] Two Trees首先我们看到1或-1,那么就是限制差距在1以内,然后我们可以想到构造一些东西来满足这种东西,然后我们经常利用的就是欧拉回路。首先这是两个树,然后我们可以根据儿子个数来判断当前点的奇偶性,如果相同编号在两个树上奇偶性不同,那么必然无解,否则我们一定能够构造一组解。具体方法就是让偶点赋值为0,然后考虑两个树上相同编号奇点连边,这时候就满足所有点的度数都是偶数的限制了,但是对于根需要处理一下,建一个虚拟根连接两个树根,那么这样跑出来欧拉回路,根据方向来确定赋原创 2021-03-02 21:54:23 · 101 阅读 · 0 评论 -
方案计数(带修计数题/线段树)
方案计数对于一个n个队员,每个队员有一个权值Vi,然后每次选择三个权值相同的A类队员,两个权值小于A类的B类队员,并且B类队员要在A类队员两侧。Q次操作,每次限制或解除限制一个队员成为A类队员。首先枚举中间的A类队员,然后可以维护每个数前面比它小的个数和后面比它小的个数,这样通过前缀和的乘积就可以计算出答案。然后考虑每次修改的影响,如果是当前点作为中间点可以用类似方法解决,否则我们发现现在求解的每个每个后缀和前面都有一个i的系数,看到这种东西可以熟练的想到交换枚举顺序,然后就变成了后缀和的二维后缀和原创 2021-02-22 23:00:15 · 88 阅读 · 1 评论 -
数字(进制/二分/组合数学)
数字求解满足从n+1到2n中有恰好m个数字含有k个1的n,并求出个数首先看到二进制的问题,我们需要寻找性质,首先考虑n+1和2n的性质,然后这道题中我们可以发现单调性,所以可以原创 2021-02-19 18:12:22 · 110 阅读 · 0 评论 -
A. [2021.2.16多校省选模拟18]无向图(异或的性质/排序处理)
A. [2021.2.16多校省选模拟18]无向图给定一张无向连通图,要求删除边使得奇度数点数量最大,输出字典序最大的一组解。首先发现删除图上一条链的作用就是使得两端点奇偶性变化,中间点不变,然后我们只需要处理图上偶度数点即可,考虑使用若干条链将它们连接,因为异或的性质可以发现一个类似反悔贪心的性质,每条边选不选只和被覆盖次数奇偶性有关,所以只要图联通一定就有解。然后考虑字典序的限制,考虑贪心,每次考虑编号最小的边,每次删边,如果图仍然联通那么就可以删去,删边不好处理我们考虑加边,可以按照编号从大到小加原创 2021-02-16 17:45:57 · 60 阅读 · 0 评论 -
自然数幂之和
自然数幂之和https://blog.csdn.net/suncongbo/article/details/97622131这个文章的整理非常全面。原创 2021-02-08 15:35:12 · 297 阅读 · 0 评论 -
P5055 【模板】可持久化文艺平衡树
P5055 【模板】可持久化文艺平衡树突然发现fhq_treap也是可以支持区间翻转的,所以基本上和其他平衡树是一样的,而且还满足重量平衡树的性质,真是太优秀了,只不过常数稍微比较大。然后这里我们变成了一颗区间平衡树,需要支持以下几个操作。若 opti=1,则接下来两个整数 pi,xi,表示操作为在第 pi个数后插入数 x。若 opti=2,则接下来一个整数 pi,表示操作为删除第 pi个数。若 opti=3,则接下来两个整数 li,ri,表示操作为翻转区间 [li,ri]。若 opti=4原创 2021-02-06 17:36:39 · 109 阅读 · 0 评论 -
P4211 [LNOI2014]LCA(树链剖分/树论/讨论贡献/拆分贡献/离线技巧/差分与前缀和)
P4211 [LNOI2014]LCA给你一颗n个点的树,有q次询问,每次询问一个 区间内的点到z的lca深度和。思路就是看上去像是一个二维问题,但是这个东西又不好维护,所以我们考虑交换枚举顺序讨论贡献,首先深度这个东西我们可以理解为该点到根节点经过的点数,然后现在我们将深度拆开了,然后考虑每个点的贡献,那么这个点的贡献等于在它下面的lca个数,然后如果一个点是两个点最近公共祖先的祖先,那么它一定是两个点的公共祖先。所以问题转化为求解一些点和z的公共祖先个数,那么我们发现实际上就是他们两个点到根的链的原创 2021-02-06 08:04:28 · 20 阅读 · 0 评论 -
P2664 树上游戏(点分治/计数题计算贡献/树上差分)
P2664 树上游戏对于树上n个点,每个点有不同颜色,求解每个点到其他点的路径上不同颜色个数之和。首先看到这种树上点对问题,我们可以想到点分治,然后考虑每次分治如何求解答案,本质上就是一个数颜色的问题,然后我们采用类似的思路,考虑每个颜色第一次出现时的贡献,但是现在的问题就在于一条链是没有前后的,所以我们可能需要一些计算。首先对于分治中心的贡献计算,我们可以从中心开始dfs,在每个颜色第一次出现的地方有size的贡献。然后考虑每个子树内部的点,对于在从当前点到分治中心的链上出现过的颜色,我们直接将其原创 2021-02-05 20:18:48 · 123 阅读 · 0 评论 -
A. 树与路径(树论/多项式/分治FFT)
A. 树与路径首先考虑一个dp的方法,对于这种链划分的题目,有一个很重要的思想就是按照每个点的角度考虑,实际上链划分就是匹配问题,每个点只能出一条边和入一条边,所以我们拆点之后就是匹配,这也是网络流最少链覆盖的思路。这道题是在树上那么就有更好的性质,实际上对于每个点的状态就是将所连接的边进行匹配,并且每个点的状态是独立的,所以我们可以考虑一个暴力的dp,dpi,jdp_{i,j}dpi,j表示的是i这个点包含父亲边划分为j条链的方案数,然后可以得到转移如果没有链经过i,那么直接相乘,否则假设有k条原创 2021-02-01 22:26:25 · 121 阅读 · 0 评论 -
[2021.1.13多校省选模拟2]T1(动态规划/轮廓线dp)
[2021.1.13多校省选模拟2]T1一个经典的轮廓线dp,可以发现一定可以找到一条轮廓将这个图形分开,然后使得左半部分由左边处理,右半部分由右边处理,然后我们只需要处理这个折线即可,具体实现需要处理前缀和的前缀最大值,然后每次选择最大值作为权值。...原创 2021-02-01 19:25:24 · 61 阅读 · 0 评论 -
[2021.1.31多校省选模拟12]随机变换的子串(线段树维护分治/字符串/自动机思想)
[2021.1.31多校省选模拟12]随机变换的子串对于这三种操作,我们惊奇地发现有这样的性质,所有长度大于4的字符串都可以通过变换变为长度小于等于4的字符串,那么查询本质不同的字符串我们只需要处理12种字符串的出现次数即可。然后对于区间所有字符串数量级是O(n2)O(n^2)O(n2)的,所以我们考虑分治处理,那么将分治用一个数据结构维护下来,那就是一颗线段树了,然后考虑需要哪些信息,我们需要维护所有前缀信息和后缀信息以及整个串信息。考虑如何快速合并信息,这个思想就很巧妙了,就是对这12个串建立一个原创 2021-02-01 12:59:12 · 68 阅读 · 0 评论 -
P4707 重返现世(扩展min-max容斥\多项式\动态规划)
P4707 重返现世首先对于这种n个物品凑齐k个的问题肯定是扩展minmax容斥了,然后我们就可以把问题转化为min的问题了,然后又是几何级数的老套路直接变为倒数就是期望次数。kth−max(S)=∑T(−1)k−∣T∣(∣T∣−1k−1)f(T)kth-max(S)=\sum_{T}(-1)^{k-|T|}\binom{|T|-1}{k-1}f(T)kth−max(S)=T∑(−1)k−∣T∣(k−1∣T∣−1)f(T)然后我们实际上求解的就是一个背包问题,对于某一个给定的集合大小求解所原创 2021-01-29 23:12:19 · 30 阅读 · 0 评论 -
Pólya 定理
Pólya 定理https://www.luogu.com.cn/problem/solution/P4980代码细节:注意暴力求φ的时候需要最后特判剩余的x是否是1,因为可能会剩余一个单独的质数没法筛出来,如果不是1就说明剩余了一个质数。原创 2021-01-28 08:47:19 · 17 阅读 · 0 评论 -
[2021.1.26多校省选模拟9]松鼠串门(线性基/离线策略/贪心)
[2021.1.26多校省选模拟9]松鼠串门询问树上一些父子链的最大异或和.N<=5e5首先可以想到一个O(nlognw2)O(nlognw^2)O(nlognw2)的做法,就是倍增维护线性基,每次线性基合并是O(w2)O(w^2)O(w2)然后对于这种父子链我们考虑让儿子继承父亲信息.然后离线询问,采取类似于区间上的离线策略,统计每一个左端点的答案,然后每次移动右端点,这样我们就能够将一些问题贪心处理,让对应贡献在最靠右的位置产生。但是关键在于深度限制,这里有一个关键思想,就是实际上对于线性原创 2021-01-26 16:02:10 · 14 阅读 · 0 评论 -
dp套dp(动态规划)
dp套dp这是一个对于一类动态规划的计数问题的处理方法,问题常常是如果形式确定就可以直接dp,但是现在却要求满足某个要求的所有方案数,一般的处理方法就是一维负责增量构造,其他维度用来表示内部dp状态,然后转移时候先让内部状态转移,然后外部dp对应存储方案数。类似于将内部的dp转移变成一个自动机,可以接受所有不同的转移,然后我们的外层dp就是在自动机上进行计数。P4590 [TJOI2018]游园会给定一个长度为k的字符串,求解长度为n的字符串中LCS为i的个数,对所有的i输出答案。首先对于LCS的原创 2021-01-25 18:36:22 · 1484 阅读 · 0 评论 -
E - Rotate and Flip(转化一般性)
E - Rotate and Flip对于有n个点,m个变换(包括旋转90度和关于某条直线对称),q次询问ai点在bi个变换后的坐标。显然对于这些变换我们都是能够直接利用公式求解的,所以我们直接用未知数表示变换后的坐标即可,但是我们要用一般性的式子表示,所以就是用三个系数表示为(a0x+b0y+c0,a1x+b1y+c1)的形式即可。...原创 2021-01-24 18:55:35 · 90 阅读 · 0 评论 -
P4249 [WC2007]剪刀石头布(网络流/费用流)
P4249 [WC2007]剪刀石头布在一个竞赛图上一些边的方向已经确定,但是还有一些边的方向没有确定,求解最多有多少三元环。首先看到三元环个数,按照套路我们利用度数计算,然后考虑每一条边,每一条边的贡献就是使两个点中的一个度数加1,那么对于答案贡献就是减少原有度数个三元环。这看上去就像是一个匹配问题,并且有费用,所以我们需要利用费用流。但是现在的问题就是每一次减少的个数会发生改变,也就是说流到一个点的费用和次数有关,所以我们不能直接建一条边处理了。由于每一次流的费用是递增的,所以我们可以建n条边流量原创 2021-01-22 19:46:38 · 85 阅读 · 0 评论 -
【清华集训2014】Sum)(类欧几里得算法)
【清华集训2014】Sum然后本质上我们需要求解的就是那个带根号式子的奇偶性,然后我们发现这个式子很像是类欧几里得算法,求解一个斜率为无理数直线下的整点个数,然后我们直接对于一般形式求解,那么就是每次利用整数部分将斜率减小,然后交换枚举顺序讨论贡献,这样就可以得到一个规模更小的问题,重复这个过程直到n变为0....原创 2021-01-21 16:29:13 · 152 阅读 · 0 评论 -
P5170 【模板】类欧几里得算法
P5170 【模板】类欧几里得算法https://www.cnblogs.com/bztMinamoto/p/10334354.html对于类欧几里得算法,本质上可以理解为一条直线下的整点个数,是一个矩形区域。然后将整数部分提出,就可以使得这个直线斜率较小,那么我们就可以转化为上方三角形部分,然后就又可以减小斜率了。然后对于不同类型的式子我们都可以对下方的整点定义贡献,然后交换枚举顺序之后,就是讨论每类整点的贡献,然后就可以将问题转换为规模更小的问题。本质思想还是计算每类点对问题的贡献,然后利用整除原创 2021-01-21 16:18:58 · 89 阅读 · 0 评论 -
A Story of One Country (Hard)(中途相遇法/启发式分裂)
A Story of One Country (Hard)https://www.luogu.com.cn/problem/solution/CF1181E2首先考虑暴力的做法,就是每次排序然后寻找分割点,对分割点左右两边分治处理,但是这样的复杂度是 最坏情况下O(n2logn)O(n^2logn)O(n2logn)然后我们考虑优化这个算法,首先我们不能每次排序,可以用一个set维护,然后每次只需要分裂set即可,利用启发式分裂最坏情况下就是从中间分裂,这样就会有O(nlogn)次插入删除。但是另外原创 2021-01-21 09:49:10 · 111 阅读 · 0 评论 -
CF1168D Anagram Paths(由必要到充分/虚树)
CF1168D Anagram Paths对于这道题首先有一个关键的性质,那就是对于一个树,它是可重排的,当且仅当在树上任意一个节点,所有字母在相关联的字符串中出现次数最大值之和小于当前点到叶子的距离。这个性质可以通过归纳证明,首先对于一个点连接所有叶子的情况肯定成立,然后对于一般的情况我们发现所有儿子满足条件后可以当作一条链,其内部的字母集合是一定的,所以我们相当于对若干条不相交的链合并,那么上面的结论就是正确的,那么通过归纳我们可以得证。然后得到这个性质之后,我们就知道如何求解答案了,但是还需要支原创 2021-01-20 23:16:40 · 95 阅读 · 0 评论 -
打表
打表众所周知,打表是一项非常非常重要的技能QAQ寻找通项:直接观察一元函数或者一些dp值或者sg值的规律注意二进制:有些规律不在10进制下,而是存在于二进制下观察递推关系:有时候无法得到有用的通项,但是可以通过观察前后几项得到递推关系。...原创 2021-01-20 20:25:25 · 89 阅读 · 0 评论 -
P1975 [国家集训队]排队(三维偏序)
P1975 [国家集训队]排队查询逆序对数目,交换两个数的位置首先逆序对是一个经典的二维偏序问题,然后现在问题变为静态,我们可以使用三维偏序来处理多出来的限制。或者也可以使用带修主席树处理。...原创 2021-01-18 20:15:00 · 80 阅读 · 0 评论 -
#2989. 数列(cdq分治/曼哈顿距离)
#2989. 数列给定一个长度为n的正整数数列a[i]。定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x-y|+|a[x]-a[y]|。2种操作(k都是正整数):1.Modify x k:将第x个数的值修改为k。2.Query x k:询问有几个i满足graze(x,i)<=k。因为可持久化数据结构的流行,询问不仅要考虑当前数列,还要考虑任意历史版本,即统计任意位置上出现过的任意数值与当前的a[x]的graze值<=k的对数。(某位置多次修改为同样的原创 2021-01-18 20:00:26 · 89 阅读 · 0 评论 -
P2487 [SDOI2011]拦截导弹(cdq分治/计数问题思想)
P2487 [SDOI2011]拦截导弹求解二维上的LIS,并且要求出每个点的选中概率。首先对于每个点的选中概率,可以通过方案数计算,那么就是选中它的方案数除以总方案数。关键在于选中它的方案数怎么求,可以通过以它开头的LIS方案数和以它结束的LIS方案数进行计算。这个计算方法还是很巧妙的,相当于我们钦定了选择它,然后向两边都是LIS。然后就是一个典型的三维偏序了。...原创 2021-01-18 16:34:31 · 89 阅读 · 0 评论 -
CF938G Shortest Path Queries(线性基/线段树分治/异或)
CF938G Shortest Path Queries支持加边删边和查询两点之间的异或最短路,我们可以使用线段树分治,然后利用线性基求解。但是这里图可能不是联通的,所以查询两点之间的异或和需要边带权并查集维护,然后还不能路径压缩,必须按秩合并。不过这里这个维护异或和的时候只需要计算跟之间对应的异或就好了。线性基是处理异或问题的手段之一还有利用按位处理的方法处理异或问题的思路...原创 2021-01-18 16:03:08 · 114 阅读 · 0 评论 -
P3733 [HAOI2017]八纵八横(线性基/线段树分治)
P3733 [HAOI2017]八纵八横这是那道线性基的加强版,现在要求从1节点出发的一条路径异或和最大,并且还要支持修改权值和加边删边。我们可以直接线段树分治然后将所有修改用vector存下来,然后最后dfs一遍整个线段树,然后每次类似于整体二分中将修改序列移动的方式,对于覆盖整个当前节点的区间直接处理,然后对于覆盖左节点的放到左边,覆盖右节点放到右边,然后回溯的时候栈序撤销即可,每一次向线性基加入一个数只会将一个位置由0变为其他数,我们每一次将对应位置reset即可。...原创 2021-01-18 15:41:37 · 106 阅读 · 0 评论 -
【BZOJ4028】[HEOI2015]公约数数列(分块/数量级很小法)
【BZOJ4028】[HEOI2015]公约数数列https://www.luogu.com.cn/problem/P4108求解最靠前的一个位置前缀gcd和前缀异或的乘积恰好等于x,并且要求支持单点修改首先我们可以发现这个问题没法使用线段树维护,因为不仅前缀没有单调性,而且修改也难以处理,所以我们考虑分块。首先单点修改就变得很简单了,直接对应块暴力重构即可,然后查询的时候利用到一个性质,就是本质不同前缀gcd只有O(logn)种,对于块内gcd会改变的的只有O(logn)块,对于这些块暴力处理,对原创 2021-01-17 11:29:36 · 99 阅读 · 0 评论 -
【UOJ#33】【UR #2】树上GCD(长链剖分/根号分类讨论)
【UOJ#33】【UR #2】树上GCD求解树上两个点到lca的距离的最大公约数是k的对数首先我们很容易就想到莫比乌斯反演,那么利用倍数形式,我们只需要求解是i的倍数的对数。考虑枚举lca,这个问题就和深度有关,那么可以长链剖分,然后每次枚举倍数是O(dlogd)的,但是这里的深度不止是轻链还有重链,那么复杂度就不对了。但是我们发现当这个倍数很大时复杂度是正确的,每次维护轻链的倍数,然后对于每个倍数跳,总复杂度就是O(nn)O(n\sqrt{n})O(nn)。但是很小的时候就不对了,但是我们利用根原创 2021-01-18 08:50:57 · 144 阅读 · 0 评论 -
CF198D Cube Snake(三维空间/增量构造)
CF198D Cube Snaken<=50显然是一个构造题,然后很容易想到增量构造,可以考虑每次保证一层值域连续,然后再增加一个值域连续的层,就会产生两个值域连续的正方体,但是只移动头是不够的,所以我们还需要移动蛇的尾巴,然后这样每次添加三个层,就可以构造出一个新的值域连续的正方体。然后这个代码实现非常巧妙,每次将添加一层封装到一个函数中,虽然参数有11个,但是非常清晰,我们需要知道的信息有初始位置(x,y,z),然后位移量(dx,dy,dz)以及平移方向(o)还有修改范围(n,m),和编号与原创 2021-01-16 09:58:40 · 87 阅读 · 0 评论