02 2016 档案
摘要:首先答案一定是包含直径某个端点的一个连通块里所有边权值之和,设直径为,以和分别为根进行处理。 首先按照最长路法则将这棵树进行树链剖分,那么每个叶子的贡献为它与它所在链顶端的点的距离。 将叶子按贡献从大到小排序,并求出表示子树内叶子排名的最小值。 对于询问$(x,
阅读全文
摘要:考虑从左往右填数,维护当前数字权值与权值的差值,如果差值大于9,那么以后无论怎么填,都不会改变大小关系。 所以设表示填了前位,差值为,是否卡住上限为的方案数,然后DP即可。 #include<cstdio> #include<cstring> #
阅读全文
摘要:枚举答案长度,设和分别为第一个循环节和反串的第一个循环节。 1.坏点不在,那么可以暴力匹配检验。 2.坏点不在,那么把串翻转后不在中,转化为1。 3.坏点在和的交里面,那么只要长度为的前后缀相同,那么就存在长度为的循环节。 通过扩展
阅读全文
摘要:首先求出区间前大数中奇数的个数和偶数的个数。 如果都是偶数,那么答案就是前大数的和。 否则,要么去掉最小的偶数,加上最大的奇数,要么去掉最小的奇数,加上最大的偶数。 主席树维护即可。 时间复杂度。 #include<cstdio> #include<alg
阅读全文
摘要:记忆化搜索,设表示符号一开始kmp指针为,中间匹配了多少次,则表示匹配结束后kmp指针的位置。 时间复杂度。 #include<cstdio> #include<cstring> const int N=26,M=105,P=1000
阅读全文
摘要:因为是一个排列,所以可以用位二进制数来表示求LIS时的单调栈。 首先通过的预处理,求出每种LIS状态后面新加一个数之后的状态。 设表示已选数字集合为,LIS状态为的方案数。 转移时枚举不在里的数,如果
阅读全文
摘要:求出左上角到每个需要保护的点左上角的最短路树,那么最优解一定圈住了它们。 然后将每个点拆成四个点,四个点之间如果没跨越最短路树的树边,那就连0权边。 每个需要保护的点四周4个点都不可通行,求出最短路即为答案。 时间复杂度。 #include<cstdio> #inclu
阅读全文
摘要:\[\begin{eqnarray*}&&\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)^k\\&=&\sum_d d^k\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=d]\\&=&\sum_d d^k\sum_{i=1}^{\lfloor\frac{n}
阅读全文
摘要:树链剖分+线段树,每个节点维护以下信息: (1)单独在某个点分配个人的最大收益。可以合并。 (2)分配个人的最大收益。可以用合并。 时间复杂度。 #include<cstdio> #include<algor
阅读全文