自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(378)
  • 收藏
  • 关注

转载 【模板】组合数取模

\(N \le 2000, M \le 2000\)直接利用递推式预处理即可。代码如下#include <bits/stdc++.h>using namespace std;const int mod = 1e9 + 7;int main() { ios::sync_with_stdio(false); cin.tie(0), cout.ti...

2019-09-29 14:58:00 313

转载 【模板】多项式求逆

代码如下#include <bits/stdc++.h>using namespace std;typedef long long LL;const LL mod = 998244353, g = 3, ig = 332748118;inline LL fpow(LL a, LL b) { LL ret = 1 % mod; for (; b...

2019-09-28 00:29:00 234

转载 【模板】线性基

线性基主要用于解决子集异或问题。#include <bits/stdc++.h>using namespace std;typedef long long LL;struct linear_basis { vector<LL> s; int n, zero; linear_basis(int _n) { n =...

2019-09-27 20:26:00 221

转载 【洛谷P2387】魔法森林

题目大意:给定一个 N 个点,M 条边的无向图,边有两个边权 a, b,求从 1 号节点到 N 号节点路径的两个权值和的最大值最小是多少。题解:对于有两个属性的结构的最优化问题,可以考虑先按照其中一个分量进行排序。接着从小到大枚举这个有序的分量,计算以当前枚举到的值为这一分量的最大值时,全局的最优解是多少。因此,需要高效维护的是如何求出另一个分量的最优解。对于这道题来说,考虑对 a...

2019-09-26 19:27:00 140

转载 【模板】后缀自动机

后缀自动机是一个能够接受母串所有后缀的最简自动机。其中,每个节点代表一个字符串集合,该集合中所有的字符串均有相同的 \(right\) 集合。各个节点之间根据 \(right\) 集合的关系可以组织成一棵树形结构,称为 \(parent\) 树。后缀自动机最多有 \(2*n - 1\) 个节点。代码如下#include <bits/stdc++.h>using ...

2019-09-25 18:17:00 162

转载 【模板】矩阵求逆

\[PA=E, PE=P\]按照定义,P 即为 A 的逆矩阵。矩阵乘法可以看作是对右边矩阵的一个线性变换,即:A 经过 P 的线性变换变成了 E,E 经过同样的线性变换变成了 P。因此,只需要在高斯消元 A 矩阵,将 A 变成单位矩阵的同时,维护一个单位矩阵,做与 A 完全相同的线性变换即可得到逆矩阵。代码如下#include <bits/stdc++.h>us...

2019-09-23 22:35:00 412

转载 【hdu5517】Triple

题目大意:给定一个二元组集合A{<a, b>}, 一个三元组集合B{<c, d, e>}, 定义 C 为 A 和 B 在 {b = e} 上的连接,求 C 集合中凸点的个数,即:最值点的个数。题解:C 为一个三元组集合,求凸点的个数问题等价于三维偏序问题,去重之后可以直接计算。不过,发现若直接暴力进行连接运算,最坏情况下会产生 \(O(NM)\) 个 C 元...

2019-09-23 19:42:00 120

转载 【模板】多标记 LCT

代码如下#include <bits/stdc++.h>using namespace std;typedef long long LL;const int mod = 51061;struct node { node *l, *r, *p; int rev, val; LL sum, add, mul, sz; node() { l...

2019-09-21 22:15:00 75

转载 【洛谷P4172】水管局长

题目大意:给定 N 个点,M 条边的无向图,支持两种操作:动态删边和查询任意两点之间路径上边权的最大值最小是多少。题解:引理:对原图求最小生成树,可以保证任意两点之间的路径上边权的最大值取得最小值。证明:任取两点 x, y,若 x, y 的路径上最大值最小的边不在最小生成树的路径上,可以将那条边加入最小生成树中,并删去由这条边的加入所带来的环中边权最大的那条边,可以使得最小生成树更...

2019-09-21 11:32:00 105

转载 【模板】LCT

\(LCT\) 是解决动态树问题的一种强力的数据结构,这种数据结构维护的是由若干 \(splay\) 节点构成的森林。\(LCT\) 结构中采用了实链剖分的策略,即:将树边划分为实边和虚边,其中实边指的是 \(splay\) 节点通过节点中儿子指针相连的边,虚边指的是通过父节点指针相连的边。实边所构成的所有点在同一棵 \(splay\) 中,虚边连接不同的 \(splay\)。这样,就...

2019-09-18 23:04:00 101

转载 【CF786B】Legacy

题目大意:初始给定 N 个点,支持三种操作:两点之间连边;一个点与一个连续区间编号的点之间连边;一个连续区间内的点和一个点连边,求执行 N 次操作之后的单源最短路。题解:学会了线段树优化建图。发现若暴力进行连边,时间和空间都会被卡到 \(O(n^2)\),直接起飞。发现连边的点的编号是连续的,结合线段树可以维护连续区间信息的思想,就产生了线段树优化建图的方法。在初始的 N 个节点...

2019-09-16 18:32:00 166

转载 【模板】单峰函数求极值

这里采用的是求导+二分的做法。其中用到了多项式的单点求值算法,即:秦九韶算法,对于一个 N 次多项式的单点求值,只需要做 N 次乘法和 N 次加法即可求出在某点处的值。代码如下#include <bits/stdc++.h>using namespace std;const double eps = 1e-6;int main() { ios::sync_...

2019-09-16 15:03:00 638

转载 【CF750E】New Year and Old Subsequence

题目大意:给定一个长度为 N 的字符串,定义一个字串是“好的”,当且仅当字串中含有一个 “2017” 的子序列,且不含有 “2016” 的子序列。现给出 M 个询问,每次询问区间 [l, r] 内至少删去多少个字符才能使得该区间变成“好的”。题解:由于题目中要求的是子序列,且序列长度仅为 4,考虑状压,即:"" -> 0, “2” -> 1, "20" -> 2, ...

2019-09-10 20:33:00 165

转载 【洛谷P2147】洞穴勘测

题目大意:维护 N 个点的无向图,支持动态加边和删边,回答两点的连通性。题解:线段树分治 + 可撤销并查集询问可以离线,这是线段树分治的基础。建立在操作时间轴上的线段树称为线段树分治算法。本题中线段树维护的是当前时间段中出现的边的集合。分析可知,对于一条边来说,至多出现在线段树上 \(O(logm)\) 个节点的集合中,至多 \(M\) 条边,因此,线段树上的边集合大小一共为 \...

2019-09-05 20:50:00 123

转载 【HDU6635】Nonsense Time

题目大意:给定一个长度为 N 的序列,开始时所有的位置都不可用,每经过一个时间单位,都会有一个位置被激活。现给定激活顺序的序列,求每次激活之后全局的最长上升子序列的长度,保证数据随机。题解:引理:数据随机的情况下,一个长度为 \(N\) 的序列的最长上升子序列的期望长度为 \(O(\sqrt n)\)。(暂时不会证明qaq)发现若正序考虑,判断每次被激活位置的值是否对当前全局最优解...

2019-09-04 00:17:00 115

转载 【银川网络赛G】Factories

题目大意:给定一棵 N 个节点的树,边有边权,选定 M 个叶子节点,使得任意两个叶子节点的树上距离之和最小,求最小值是多少。题解:任意两点的树上距离和问题应从边的贡献角度考虑。设 \(f[u][i]\) 表示以 u 为根的子树中,选了 i 个叶子节点的最优解,状态转移方程为:\[f[u][i + j] = min(f[u][i + j], f[u][i] + f[v][j] + ...

2019-09-03 20:38:00 176

转载 【2019银川网络赛】L:Continuous Intervals

题目大意:给定一个长度为 N 的序列,定义连续区间 [l, r] 为:序列的一段子区间,满足 [l, r] 中的元素从小到大排序后,任意相邻两项的差值不超过1。求一共有多少个连续区间。题解:单调栈 + 线段树首先,对于区间计数类问题常规的思路是枚举区间的左端点或右端点,统计以该点为端点的区间个数,加入答案贡献。对于这道题来说,不妨枚举答案的右端点 r,那么对于每个 r,需要快速得出...

2019-09-03 15:47:00 166

转载 【模板】分治 FFT

题目大意:给定长度为 \(n - 1\) 的序列 \(g\),求 \(f\) 序列,其中 \(f\) 为\[f[i]=\sum_{j=1}^{i} f[i-j] g[j]\]学会了分治 \(fft\)。发现这个式子中也含有卷积,但是这是一个递推式,即:\(f\) 数组是未知的。考虑分治策略,即:假设已经算出区间 \([l, mid]\) 的 \(f\) 值,现在要计算区间 \...

2019-08-30 23:27:00 170

转载 【洛谷P4173】残缺的字符串

题目大意:给定一个文本串和一个模板串,串中含有通配符,求文本串中有多少个位置可以与文本串完全匹配。题解:利用卷积求解字符串匹配问题。通配符字符串匹配的数值表示为 \[\sum\limits_{i = 0}^{m - 1}(a[i] - b[i + k])^2 a[i]b[i + k]=0\]。直接展开之后计算三个卷积即可。需要注意的是:并不是所有 a[i] b[i + k] 均为循...

2019-08-29 20:22:00 145

转载 【HDU6709】Fishing

题目大意:有 N 条鱼,每条鱼都有钓鱼和烤鱼的时间,钓鱼的时间均相同,每条鱼都有自己的烤鱼时间,一次只能烤一条鱼,且不能间断。现要求通过某种顺序将所有的鱼钓上来并烤完,求最小的时间是多少。题解:对于顺序可以自选的情况,可以从全局的角度进行考虑。对于最终状态,每条鱼被烤的时间和钓鱼的总次数是固定的,且一定要先钓上来一条鱼。最好情况就是所有的其他鱼均可以在烤鱼的时候钓上来。不过,可能会存...

2019-08-28 17:36:00 149

转载 【HDU6703】array

题目大意:给定一个 N 个数字的排列,需要支持两种操作:对某个位置的数字 + 1e7,查询区间 [1, r] 中最小的不等于区间中任何一个数字的数。题解:本题证明了对于 50W 的数据来说,\(O(nlog^2n)\) 的算法是过不去的。。首先,最暴力的做法就是树状数组套权值线段树,实现了支持单点修改的主席树功能,但是复杂度爆炸了。题目中所给的排列这一条件,可知没有两个数字是相同...

2019-08-28 16:39:00 148

转载 【洛谷P3957】跳房子

题目大意:给定一个数轴和 N 个点,点有点权,现从 0 位置出发,初始时每次只能走 d 的距离,可以在数轴上任意位置停下,此时,会得到一个点权和。现允许支付 x 的费用,使得每次可以走的距离为一个范围 [max(1,d-x), d+x]。求最少支付多少费用才能使得经过的点权和至少为 k。题解:根据本题的数据范围可知,需要一个一维的状态和 O(1) 时间内的状态转移。发现若支付 X 的...

2019-08-07 21:58:00 124

转载 【The 13th Chinese Northeast Collegiate Programming Contest E题】

题目大意:给定一棵 N 个点的树,边有边权,定义“线树”为一个图,其中图的顶点是原树中的边,原树中两条有公共端点的边对应在线图中存在一条边,边权为树中两条边的边权和,求线图的最小生成树的代价是多少。题解:对于树中的一个顶点来说,假设有 M 条边以该顶点为一个端点,那么这 M 条边对应到线图中的顶点必须要求能够构成一个联通块。另外,可以发现这个问题的解决和其他顶点无关,即:对于树上每个...

2019-07-20 12:02:00 250

转载 【The 13th Chinese Northeast Collegiate Programming Contest H 题】

题目大意:NOIP2018d1t1 支持 M 次区间查询答案和区间修改操作。题解:首先考虑不带区间修改的情况。从左到右进行考虑,发现对于第 i 个数来说,对答案的贡献仅仅取决于第 i-1 个数的大小:若 \(a_i \le a_{i-1}\),则第 i 个数对答案的贡献为 0,否则对答案的贡献为两者的差值。贡献可以这样算是因为每个点至少增加 \(a_i\) 次,且当前点增加多少仅对后...

2019-07-20 11:48:00 181

转载 【CF1187E】Tree Painting

题目大意:给定一棵 N 个点的树,初始全是白点。要求你做 N 步操作,每一次选定一个与一个黑点相隔一条边的白点,将它染成黑点,然后获得该白点被染色前所在的白色联通块大小的权值。第一次操作可以任意选点,求可获得的最大权值。题解:对于答案仅由起始点决定的 dp 采用换根法。发现对于两个相邻的染了黑色的点来说,这两个点染色的先后顺序会对答案产生影响,但是不会对其他点产生影响。同时,可以发现...

2019-07-13 20:52:00 154

转载 【CF1187C】Vasya And Array

题目大意:给定一个长度为 N 的数组,以及 M 个区间,给出的区间有两个性质,性质一是给定区间中的元素单调不减,性质二是给定区间中的元素存在相邻单调减的元素对,求构造一个符合给定区间条件的序列,若不存在,则输出 NO。题解:没有从差分的角度进行考虑,WA 到吐血。。。区间增减性的问题应该从差分角度进行考虑。对于 [l,r] 中元素单调不减时,对应的差分数组 [l+1,r] 应该每一项...

2019-07-13 20:36:00 131

转载 【SPOJ2371】LIS2

题目大意:求二维最长上升子序列的长度。题解:可以看出,这个问题等价于三维偏序问题。不过在进行分治的时候要注意,由于 dp 转移是有顺序的,因此只能先处理左半部分,再处理左半部分对右边的贡献,最后处理右半部分。代码如下#include <bits/stdc++.h>using namespace std;const int maxn=1e5+10;int n,...

2019-06-30 16:04:00 124

转载 【BZOJ1176】Mokia

题目大意:给定一个 N*N 的矩形,有 Q 次操作,每个操作可以是矩形单点修改或查询子矩形的权值和。题解:CDQ分治适合处理修改操作之间互不影响且支持离线的题目。满足以上操作条件的显然可以树套树来做,不过代码量起飞,我也写不出来 qaq。。学到了利用 cdq 分治来解决这种问题。发现操作之间存在一个时间维度,即:能够对当前查询操作产生贡献的一定是时间在该询问之前的修改操作。维护子矩...

2019-06-30 14:32:00 243

转载 【洛谷P1280】尼克的任务

题目大意:一个人在时间 [1,N] 内工作,现有 M 个任务,每个任务需要在一段固定的时间区间内完成,任务之间的时间可能有重叠。若当前时间有任务要开始,且人处于空闲状态,则一定要这个人来做,否则这个人忽略这个任务。求用以上原则进行工作的最长休息时间是多少。题解:若用 f[i] 表示前 i 分钟的最长休息时间的话,发现很难表示出 i 这个点有任务就一定要执行的情况,原因是这是对未来状态...

2019-06-27 11:42:00 138

转载 【洛谷P4309】最长上升子序列

题目大意:给定一个序列,初始为空。现在我们将 1 到 N 的数字插入到序列中,每次将一个数字插入到一个特定的位置。每插入一个数字,我们都想知道此时最长上升子序列长度是多少?题解:学会了 rope 操作。由于是从小到大插入元素,发现当前插入 i 时,对前 i-1 个元素的答案没有影响,即:后续插入对之前的答案不造成影响,因此可以离线操作。现在瓶颈在于如何快速构建出最终的序列形态,即:...

2019-06-25 12:27:00 312

转载 【HDU5890】Eighty seven

题目大意:给定 N 个数,M 个询问,每次询问如果去掉三个数(可能相同),能否选择恰好 10 个数字,凑出 87 这个数。题解:骚操作。。集合凑数问题是一个很经典的模型,即:背包问题。先进行预处理,每次枚举三个位置,跑一遍背包,计算出删除这三个位置的数是否可以组合出 87 这个数字。查询的时候直接 \(O(1)\) 回答即可。但是发现预处理复杂度为 \(O(5*50*50*50*...

2019-06-24 16:48:00 113

转载 【hiho1087】Hamiltonian Cycle

题目大意:给定一个 N 个点的有向图,计数图上哈密顿回路的条数。题解:哈密顿回路需要经过除了初始位置,每个点恰好一次。如果已知一条哈密顿回路的方向,那么从这条路上任意一个点出发,得到的都是同样的结果。因此,不妨设从 0 号节点出发,最后回到 0 号节点。统计答案只需要枚举最后一个点在哪个位置即可。代码如下#include <bits/stdc++.h>using na...

2019-06-24 15:54:00 124

转载 【CF160E】Buses and People

题目大意:给定 N 个三元组 (a,b,c),现有 M 个询问,每个询问给定一个三元组 (a',b',c'),求满足 a<a', b'<b, c'<c 的最小 c 对应的元组编号。题解:这可以算是一道经典的三维偏序问题。首先,离线处理所有询问,将这 N+M 个元组按照 a 从小到达进行排序,若有相同的 a,则给定元组应该排在询问元组之前。排序后即可保证对于任意一个询...

2019-06-24 10:18:00 136

转载 【51nod1672】区间交

题目大意:给定一个长度为 N 的序列,以及 M 个区间,现从中选出 K 个区间,使得这些区间的交集区间的点权和最大,求最大值是多少。题解:发现直接选 K 个区间不可做,考虑从答案入手。设答案区间为 [l,r],进行枚举答案区间的左端点。当前枚举到的左端点设为 L,那么能够以 L 作为左端点的区间一定满足左端点不超过 L,且右端点大于等于 L。考虑若有超过 K 个区间符合要求,那么肯定...

2019-06-23 20:11:00 153

转载 【洛谷P2915】Mixed Up Cows

题目大意:给定一个长度为 N 的序列,每个位置有一个权值,现要求重新排列这个序列,使得相邻的权值差的绝对值大于 K,求合法排列的方案数。题解:由于 N 很小,应该可以想到状压,考虑如何进行设计状态。首先肯定要一个集合 S,其中第 i 项为 0 表示未被加入当前集合中,1 表示加入了当前的集合中。发现大的集合的方案数一定是由小的集合的方案数构成的,因此集合应该作为 dp 的阶段,还需要...

2019-06-18 19:45:00 134

转载 【模板】长链剖分

长链剖分适合维护与树深度有关的信息,与树链剖分中重儿子用 size 来决定不同,长链剖分中的重儿子的定义是以儿子为根的子树中深度最大的那个。这样剖分有以下几条性质:每个节点属于且仅属于一条长链。所有长链的节点和为 N。若一个节点的 K 级祖先如果存在,那么其祖先所在的长链长度一定大于 等于K。从一个节点通过条长链的方式跳到根节点,最多跳不超过 \(O(\sqrt n)\) 次...

2019-06-18 15:19:00 132

转载 【洛谷P4552】IncDec Sequence

题目大意:给定一个长度为 N 的序列,现可以进行若干次区间 +1 或区间 -1 操作,求使得序列所有的值均相同的最小操作数是多少,且最终得到的序列有多少种。题解:首先考虑执行区间+和区间-操作,可以看成在差分数组上执行单点+1和单点-1操作,即:对于差分数组的一个正值和一个负值可以通过一次操作来修改。尽可能地选出正值和负值进行操作可以保证答案最小。经过若干次选择后,差分序列中均为正值...

2019-06-17 22:00:00 162

转载 【CF1181C】Flag

题目大意:给定一个 N*M 的矩阵,定义一个矩形区域为一个“国旗”,满足:矩形区域可以按行划分成三个高度相同的部分,其中每一个部分中的颜色完全相同,第一部分的颜色与第二部分颜色不同,第二部分的颜色和第三部分的颜色不同。求给定的矩阵中有多少个不同的国旗,位置不同即为不同。题解:首先定义一个数组 d[][],其中 d[i][j] 表示以第 i 行,第 j 列的元素为顶端,在满足下面颜色和...

2019-06-17 15:45:00 194

转载 【CF1181D】Irrigation

题目大意:给定 M 个城市,每年会选出一个城市举办比赛,现给出前 N 年城市举办比赛的情况。在接下来的年份中,每年会在举办比赛次数最小的城市举办比赛,如果有很多城市举办次数均为最小值,则在编号最小的城市举办比赛。现给出 Q 个询问,每次询问第 K 年在哪个城市举办比赛。题解:首先,记录下每个城市前 N 年举办比赛的次数,并按照举办比赛的次数为第一关键字,城市编号为第二关键字进行从小到...

2019-06-17 14:36:00 184

转载 【hiho1715】树的联通问题

题目大意:给定一棵 1~n 标号的树。Tree[L,R]表示最少需要选择的边的数量使得 L~R 号点两两连通。求:\[\sum_{L=1}^{n} \sum_{R=L}^{n} \operatorname{Tree}[L, R]\]题解:要求的是经过边的数量,可以考虑每条边对答案的贡献。对于边 (u,v) ,定义一个特征序列 a[1...n],若 i 在以 u 为根的子树中,...

2019-06-15 18:02:00 230

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除