10 2018 档案
摘要:在虐各种最长公共子串、子序列的题虐的不耐烦了之后,你决定反其道而行之——被它们虐。 操作一:对A,B分别建SAM,暴力BFS。 操作二:对B建序列自动机或SAM,A在上面暴力匹配。 操作三:对A,B建序列自动机,暴力匹配。 操作四:对B建序列自动机,在自动机上DP。 上面的我一句也看不懂,对不起我重
阅读全文
摘要:先发掘性质: 1.xor和gcd均满足交换律与结合率。 2.前缀gcd最多只有O(log)个。 但并没有什么数据结构能同时利用这两个性质,结合Q=10000,考虑分块。 对每块记录这几个信息: 1.块内所有数的gcd与异或和。 2.将块内所有前缀异或和放入一个数组排序。 查询时从前往后遍历每个块:
阅读全文
摘要:看到数据范围就大概只能想到这一种做法了吧。 首先实际上是每个点的权值为v[i]=c[i]+son[i],然后删除一个点就是v[fa[i]]+=v[i]-1。 从下往上贪心删,每次将节点的所有儿子按权值排序,从小到大能删就删,这样一定最优。 感性证明一下“若因为删了某个点而使祖先无法被删去,而删这个点
阅读全文
摘要:求最小权极大线性无关组。 先将所有向量按权值排序,从小到大依次判断,若能被前面已选向量线性表出则不选,这样一定最优。 据说是用拟阵来证明,但感性理解一下感觉比较显然,首先这样个数一定是最多的,其次对于一个线性相关组,没有被选上的一定是最大的那个向量,于是解一定最优。
阅读全文
摘要:两种显然的做法: 1.树上差分+线段树合并。$O(n\log n)$ 2.树链剖分转为序列上差分+线段树。$O(n\log^2 n)$ 后一种的代码:
阅读全文
摘要:这题有多种做法,一种是倍增预处理出每个点往上走2^i步最少需要的初始战斗力,一种是裸的启发式合并带标记splay。 每个点合并能攻占其儿子的所有骑士,删去所有无法攻占这个城市的骑士并记录答案。 注意到splay每次实际上只需要取出最小的元素判断是否牺牲,这显然可以用堆维护。 关于可并堆打标记:和线段
阅读全文
摘要:密室玩小凸。 完全二叉树关于复杂度的两个性质: 1.所有点的深度和为$O(n\log n)$ 2.所有点的子树内的叶子个数和为$O(n\log n)$ 根据这两个性质可以分别解决此题。 下面使用第二个性质,参考:https://www.cnblogs.com/Gloid/p/9874570.html
阅读全文
摘要:请仔细阅读数据范围,c<=7.线段树合并裸题,对于乘积大小比较,使用log即可。
阅读全文
摘要:第一眼DP,发现不可做,第二眼就只能$O(2^{1024})$暴搜了。 重新审视一下这个DP,f[x][i]表示在x的祖先已经全部染色之后,x的子树中共有i个参战平民的最大贡献。 设k为总结点数,对于DFS,我们有$T(1)=O(\log k)$,$T(k)=4T(\frac{k}{2})+O(k^
阅读全文
摘要:题目名字是什么就不能往那方面想。 每个点拆成a[i][j]个,问题变为DAG最小路径覆盖,由Dilworth定理转成最长反链。 使用Dilworth定理的时候要注意那些点之间有边,这里任意一个点和其右下方的所有点都有边。 从右上往左下DP统计答案即可。
阅读全文
摘要:题意极其有毒,注意给的行列都是从0开始的。 状压DP,f[i][S]表示第i行状态为S的方案数,枚举上一行的状态转移。$O(n2^{2m})$ 使用矩阵加速,先构造矩阵a[S1][S2]表示上一行为S1是下一行是否能为S2,快速幂加速后得解。$O(2^{3m}m^2+2^{3m}\log n)$
阅读全文
摘要:二维矩阵匹配问题,至今不知道Q的范围是多少,反正是要求做到读入复杂度。 二维Hash:就是一维的等效拓展,注意两维的Base不能相同。 其余就是一维Hash和二维前缀和的结合,可以自然溢出,据说概率很科学。
阅读全文
摘要:求平面上n个点组成的周长最小的三角形。 回忆平面最近点对的做法,找到横坐标的中点mid分治到两边,合并时考虑离mid横坐标不超过当前最小值d的所有点,按y排序后暴力更新答案。 这个题也一样,先分治到两边,然后取出所有离mid横坐标不超过当前最小值/2的点,按y排序后选择三个总坐标不超过当前最小值/2
阅读全文
摘要:经典动态二分图问题。 考虑solve(l,r)分治成l,mid和mid+1,r。先将区间[mid+1,r]中的点全部加入图中,若此时存在奇环则ans[l..mid]全部为0,否则递归到左边。 递归完左边后将右边的点全部删去,左边点全部加入,按同样的方法处理右边。 判断奇环使用可撤销带权并查集,注意多
阅读全文
摘要:sscanf读入数字,getline(cin,string)读一整行,其余暴力模拟即可。
阅读全文
摘要:增强版就是原版中两鬼不算对子的版本。 先爆搜出完所有对子,剩下的牌DP处理。 考虑每个数码的拆牌情况,最多可能被拆成5种情况:1+1+1+1,1+1+2,1+3,2+2,4。故DP状态数最多为5^13≈12e8,事实上远远不满。 而爆搜部分看上去就跑的挺快,具体复杂度玄学。 几个降低代码复杂度的方法
阅读全文
摘要:考虑从起点到终点的过程,一定是先将空格子移到指定格子旁边,和指定格子交换,再移到下一个指定格子要到的地方,再交换,如此反复。 于是问题分为两个部分: 1.给定两个曼哈顿距离为2的格子求最短路,BFS即可。 2.根据1的结果决定从起点到终点的路径,使用SPFA求解。 其中,第一个问题空格子显然不能经过
阅读全文
摘要:WQS二分,一种优化一类特殊DP的方法。 很多最优化问题都是形如“一堆物品,取与不取之间有限制。现在规定只取k个,最大/小化总收益”。 这类问题最自然的想法是:设f[i][j]表示前i个取j个的最大收益,转移即可。复杂度O(n^2)。 那么,如果在某些情况下,可以通过将问题稍作转化,变成一个不强制选
阅读全文
摘要:模板题。 每个决策点都有一个作用区间,后来的决策点可能会比先前的优。于是对于每个决策点二分到它会比谁在什么时候更优,得到新的决策点集合与区间。
阅读全文
摘要:显然选出的每一段首尾都是相同的,于是直接斜率优化,给每个颜色的数开一个单调栈即可。
阅读全文
摘要:方法一:倒推,最常规的期望DP。f[i][a][b][c]表示还要再攻击k次,目前三种随从个数分别为a,b,c的期望攻击英雄次数,直接转移即可。 方法二:用顺推做期望DP,f[x]=(f[k]+w[k][x])*p[k][x],其中k是所有能到达x的状态,w[k][x]表示这个转移的代价(攻击随从时
阅读全文
摘要:直接不容易算,考虑拆成位处理。 设f[i]表示i到n的期望路径异或和(仅考虑某一位),则$f[y]=\sum\limits_{exist\ x1\to y=0}\frac{f[x1]}{d[x1]}+\sum\limits_{exist\ x2\to y=1}\frac{1-f[x2]}{d[x2]
阅读全文
摘要:给定两个数组a[n]与b[n](数全不相等),两两配对,求“a比b大”的数对比“b比a大”的数对个数多k的配对方案数。 据说做了这题就没什么题好害怕的了,但感觉实际上这是一个套路题,只是很难想到。 首先显然“a比b大”的个数是确定的,问题转化成求“a比b大”的数对个数为m的方案数。 不好算考虑容斥,
阅读全文
摘要:给定n个六元数,问有多少对数有m元对应相等。 考虑“有多少对数至少m元对应相等”的求法,显然枚举相等的位置,在这些位置上Hash统计即可。 容斥定理:至少有k个的-C(k+1,k)* 至少有k+1个的+C(k+2,k) *至少有k+2个的…=恰好有k个的。 按上式容斥,问题得解。
阅读全文
摘要:n次向一个栈中加入0或1中随机1个,如果一次加入0时栈顶元素为1,则将这两个元素弹栈。问最终栈中元素个数的期望是多少。 首先容易想到用概率算期望,p[i][j][k]表示已加入i个数,1有j个,总长为k的概率。(显然栈中一定是先一些0再是1)。 考虑优化,容易想到f[i][j]表示已加入i个数,1有
阅读全文
摘要:题意:树上每个点有概率有电,每条边有概率导电,求每个点能被通到电的概率。 较为套路但不好想的概率DP。 树形DP肯定先只考虑子树,自然的想法是f[i]表示i在只考虑i子树时,能有电的概率,但发现无法转移,因为只要有任何一个儿子同时满足“儿子有电且儿子到i的边导电”,这个点就能导电,而“或”命题在外层
阅读全文
摘要:将每个人跑步的路径拆分成x->lca,lca->y两条路径分别考虑: 对于在点i的观察点,这个人(s->t)能被观察到的充要条件为: 1.直向上的路径:w[i]=dep[s]-dep[i],移项得w[i]+dep[i]=dep[s] 2.直向下的路径:w[i]=dep[s]-dep[lca]+dep
阅读全文

浙公网安备 33010602011771号