复习好题
Thomas_ZQQ@Runespoor
这个作者很懒,什么都没留下…
展开
-
【题解】codeforces1097H数位dp+合并技巧
题目题意按原题给出一个序列生成方式。求第[l,r]为间有多少子串A满足A <= B<= 定义为每一位都小于等于题解思路:维护长度为d^i的区间的信息,使得区间可以合并。这样合并区间的思路非常常见。在计数和线段树。。。都可以用到注意:维护的时候如果位数不够补充成0 这样合并的时候不用再check整块是否合法关于位运算,用all维护所有状态,可以方面的实现删除和保留一...原创 2019-02-08 12:26:11 · 368 阅读 · 0 评论 -
【题解】codeforces 1129E - Legendary Tree 交互+树的性质
problem题意n个点的树每次可以询问两个集合S,T,S->T经过x的点对有多少个确定树的形态n <= 500,11111次询问题解显然询问集合应该是一个点到一个集合,这样才能确定更多有用信息。发现如果是询问x到剩余点经过v的点对,可以确定出v子树内和子树外的点数这样可以找到所有叶子,然后再找叶子的fa。删去叶子但是这样是n2的题解上的做法利用了更好的性质:...原创 2019-03-11 14:39:34 · 170 阅读 · 0 评论 -
【题解】codeforces 1023G. Pisces 最长反链 数据结构维护差分 启发式合并
problem题解这道题非常巧!我的姿势水平太落后,一开始还在想费用流,如何优化建边(可能是因为看到题目tag里有个flow。一定不能被这些tag影响,要自己摸索题目算法)费用流是经典模型:把在每一天拆点,一个表示必须用,一个表示用了的给以后的点使用。同:餐巾计划问题要是优化建边树分治?边都是nlog^2,简直是胡思乱想!Dilworth定理全集U是一个偏序集U的链划分使用的最...原创 2019-03-05 20:04:52 · 331 阅读 · 0 评论 -
【题解】【THUWC2017】随机二分图(动态规划)概率DP+状压
题面题解 yyb把后两种边拆分,因为只考虑边对完美匹配的方案的贡献,即该边出现且被使用才贡献(出现但是没有被使用视为没有出现)这个状压需要记左右点的匹配状态,因为存在强制选四个点的边。并且为了去重,每次只能枚举左边最小存在点的出边,合法状态不多,直接记忆化如果是一般的完美匹配,直接记f(i,S) : 考虑到左边第i个点,挨着匹配即可注意如果一对边有公共顶点,不用加/减额外的贡献,因为不...原创 2019-02-20 22:48:31 · 157 阅读 · 0 评论 -
【题解】codeforces 843D - Dynamic Shortest Path 最短路
题解学到了跑最短路的新姿势:当最短路<=n时,我们可以分层dij,这样总复杂度是O(n + m)的。我们从距离为0-n开始更新,这样就不用堆维护了,思路很好想。所以以后不止边权为1可以bfs求最短路。只要保证最短路比较小,就可以线性求了。这种思路很常见。比如弦图求完美消除序列的时候用链表维护。还有只有+1,-1的修改的数据结构注意这道题每次修改c条边,最短路变化=min(c,n)。...原创 2020-02-02 14:57:32 · 198 阅读 · 0 评论 -
【题解】codeforces 814E. An unavoidable detour for home 图论计数DP+最短路
题目题解最短路DP的最常用技巧:把 图分层。按照和起点的最短路长度。然后我们可以一层一层加入点。f[i][j][k]表示当前i个点,上一层j个一度点,k个二度点。DP的时候要考虑加点顺序,否则会算重:先考虑当前图只有二度点,则应该枚举构成环。每次枚举最后一个点的环大小,不能直接连边,会连出重边。然后加入一度点,考虑最后一个加入的点和前面那种点连边然后加入当前层的点,同样考虑和前面那...原创 2019-02-25 22:07:57 · 160 阅读 · 0 评论 -
【好题总结】atcoder好题选做
学习ShichengXiao’s的笔记一下是简单的小结和感想ARC 098F找性质,定经过顺序,然后DP注意要把多的贡献的定义搞清楚。因为知道了选点的先后顺序,可以dfs递归其他联通块。然而是不能直接暴力dfs的,因为这不是点分,每次找根不是重心,直接dfs会TLE。还要注意每个联通块的根不是直接和上一层根相连的点。可以倒过来做,每次合并,用并查集维护,更加好写。根据定义,每个联通块...原创 2019-03-01 10:52:48 · 1554 阅读 · 0 评论 -
【题解】codeforces 868 F. Yet Another Minimization Problem 决策单调性优化DP
题面题解题意给定一个序列 {a1,a2,⋯,an},要把它分成恰好 k 个连续子序列。每个连续子序列的费用是其中相同元素的对数,求所有划分中的费用之和的最小值。2≤n≤105,2≤k≤min(n,20),1≤ai≤n题解显然具有决策单调性,可以用四边形不等式优化DP唯一的问题是怎么快速计算w(l,r)的贡献用分治的写法。暴力从fa区间的左右端点移动到当前左右端点计算贡献即可。考...原创 2019-02-14 11:42:55 · 252 阅读 · 0 评论 -
【题解】codeforces 1103D - Professional layer 质因数分解+状压DP
题意N个数A[i],可以给每个数除不超过K的因数,使得所有数GCD为1代价是除的数个数 * 除的数的权值和N <= 1e6 , A[i] <= 1e12题解**考虑所有数gcd的所有质因数,设D=P1a1P2a2 *…Pkak , 显然当次数为1的时候个数最大,这时最多只有11个质因数把A[i]化简为只含D的质因数的向量,不同向量只有最多M = 12000个(注意这时A[i...原创 2019-02-14 10:37:28 · 399 阅读 · 0 评论 -
【题解】codeforces 1039D. You Are Given a Tree 树形dp+二分答案
题解答案显然递减,并且变化点只有根号个。当路径长度&gt;=sqrt(n)时,答案显然小于根号n所以二分答案找变化点即可这样根号的性质很常见!还有一类思路是sz不同的子树只有根号种这题还有更厉害的做法,留坑nsqrt(n * logn) 的做法要卡常,dfs太慢,每次check应该用bfs。#include&lt;bits/stdc++.h&gt;using namespace s...原创 2019-02-12 22:19:38 · 257 阅读 · 0 评论 -
【题解】Codeforces 1063F. String Journey 后缀数组+贪心
题目题解这是一道字符串好题!有几个重要的性质帮助解题:1. 每次只增加一个字符,答案不会变差2. 如果以i开头最优答案为k,则1,…,k - 1,都行3. 用dp[i]表示i开头的最优答案,dp[i + 1] + 1 >= dp[i]所以每次只需要枚举答案k,check当前是否合法。注意check的时候是询问是否有位置j满足1. j >= i + k , lcp(i...原创 2019-02-12 21:38:08 · 177 阅读 · 0 评论 -
【题解】CF1060F Shrinking Tree 概率树形dp 好题!
题面link题目描述(中文)对于一棵有 nn 个节点的树 TT 。当 TT 的节点数多于一个时,反复执行以下操作:等概率地选取 TT 中的一条边。收缩选取的边:即合并这条边连接的两个点 uu 和 vv 。得到的新点的编号等概率地从 uu 和 vv 中选取一个。当这个过程结束时, TT 只剩一个节点了,它的编号可能是 1,…,n中的任意一个数 。对于每个编号,请输出最终得到这个编号的概率。...原创 2019-02-11 16:38:15 · 356 阅读 · 0 评论 -
【题解】codeforces 1065G. Fibonacci Suffix 合并技巧+按位贪心
题目连接题意:给出一个斐波那契序列,F[0] = “0” , F[1] = “1” , F[i] = F[i - 2] + F[i - 1]. 求第k小的后缀的前m位。题解直接按位贪心每次check一个前缀在F[n]中的出现次数。这个可以维护pre,suf , num表示F[i]和当前串的前后缀匹配长度和当前串出现次数长度不够默认可以匹配,用bitset优化合并复杂度O(n * m...原创 2019-02-08 15:21:49 · 420 阅读 · 0 评论 -
【题解】uoj236 【IOI2016】railroad(欧拉图+最小生成树)
这篇题解很好总结:特殊的哈密顿回路通常考虑转化成欧拉回路。把NP问题转化成可解的东西把速度看成点,一个很巧妙的转化!这题利用了欧拉回路存在的充要条件每个联通块的进入和出去的边数相同,等价于所有点出入度相同。然后要一次性走完,还要联通,因此要最小生成树。离散化后unique一下就没有孤立点了。所有留下的点都要联通#include<bits/stdc++.h>using ...原创 2019-03-11 15:22:14 · 401 阅读 · 0 评论