- 博客(159)
- 收藏
- 关注
原创 POJ3468 A Simple Problem with Integers 分块
题目链接http://poj.org/problem?id=3468分析将原序列划分成若干段长度为 ⌊n⌋\lfloor \sqrt{n} \rfloor⌊n⌋ 的区间进行维护;设 a[i]a[i]a[i] 以表示原序列每个元素, b[i]b[i]b[i] 表示每个元素所属的区间,sum[i]sum[i]sum[i] 表示每个区间的元素之和,add[i]add[i]add[i] 表示每...
2019-10-25 15:46:34
406
原创 洛谷P4556 雨天的尾巴 树上差分+权值线段树
题目链接https://www.luogu.org/problem/P4556分析对于树上链的操作,可以用树上差分来做;由于粮食有种类,树上每个节点建一棵权值线段树来记录答案;树上差分后要合并,用线段树合并来实现。AC代码#include <cstdio>#include <iostream>#include <algorithm>usin...
2019-10-25 10:42:38
391
原创 HDOJ1255 覆盖的面积 线段树
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1255分析与普通的面积并不同的是,我们要维护被覆盖了至少两次的区间,还需同时维护至少覆盖了一次的区间,后者是很容易维护的,而对于前者来说,若整个区间被至少覆盖了两次,则结果为区间长度,否则,若区间长度为 111,则结果为 000,否则,若区间被覆盖了一次,则结果为子区间被至少覆盖一次的长度...
2019-10-24 19:32:27
278
原创 POJ2482 Stars in Your Window 线段树
题目链接http://poj.org/problem?id=2482分析题面很感人,撩妹子的小trick;依旧是扫描线法,在此之前需要一步转化,考虑对于每颗星星,能将其覆盖的矩形右上角的轨迹所组成的矩形,显然答案变为求一块区域,使得矩形在其上覆盖产生的权值和最大,建一棵线段树支持区间加和区间查询最大值,从左往右扫描即可,注意边缘的星星不算。AC代码#include <cs...
2019-10-24 18:54:10
254
原创 IOI1998 Picture 线段树
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1828分析扫描线法,线段树节点同时记录区间端点是否被覆盖,区间中有几条水平线,累加答案时,注意线段会有覆盖,因此应加上变化量;根据记录的水平线数量统计上水平线长度。AC代码#include <cstdio>#include <cstdlib>#include &l...
2019-10-24 14:25:24
226
原创 POJ1151 Atlantis 线段树
题目链接http://poj.org/problem?id=1151分析扫描线求矩形面积并,以从左向右扫描为例,将矩形拆成 2n2n2n 条竖直线段,用线段树来维护当前有效长度,遇到某个矩形左侧的线段,则尝试增加有效长度,右侧则尝试减小有效长度;每次用有效长度乘线段间隔来累加答案。AC代码#include <cstdio>#include <algorithm&...
2019-10-24 11:24:06
145
原创 CH4302 Interval GCD 线段树
题目链接http://noi-test.zzstep.com/contest/0x40%E3%80%8C%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E8%BF%9B%E9%98%B6%E3%80%8D%E4%BE%8B%E9%A2%98/4302%20Interval%20GCD分析根据更相损减术,区间 [l,r][l, r][l,r] 的最大公约数等于 lll...
2019-10-23 17:51:44
295
原创 CH4301 Can you answer on these queries III 线段树
题目链接http://noi-test.zzstep.com/contest/0x40%E3%80%8C%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E8%BF%9B%E9%98%B6%E3%80%8D%E4%BE%8B%E9%A2%98/4301%20Can%20you%20answer%20on%20these%20queries%20III分析线段树节点记录...
2019-10-23 11:24:38
341
原创 POJ2182 Lost Cows 树状数组
题目链接http://poj.org/problem?id=2182分析对于第 nnn 头牛,若在其前面有 AnA_nAn 头牛比他矮,则其高度为 An+1A_n + 1An+1;在此之前的牛也类似,不过要考虑后面的牛可能已占用了某些高度;问题可以转化为对于一个长度为 nnn 的 010101 序列,每次找到第 kkk 个 111,且找到后需要将其置为 000;树状数组 +++ ...
2019-10-23 09:32:17
190
原创 NOI2001 食物链 扩展域并查集
题目链接http://poj.org/problem?id=1182分析由于吃与被吃关系构成了一个环,所以我们可以用扩展域并查集来维护关系;对于每种动物,建三个节点分别保存自身,能吃的与会被吃的。AC代码#include <cstdio>inline int read() { int num = 0; char c = getchar(); while (c &l...
2019-10-22 11:13:16
177
原创 NOI2001 食物链 带权并查集
题目链接http://poj.org/problem?id=1182分析用带权并查集来维护每种动物之间吃与被吃的关系,具体来说,每个节点指向其父亲的有向边的权值表示了这种关系,000 表示是同类,111 表示吃父亲,222 表示被父亲吃,确定某两点之间边的权值时要注意参与运算的各边的方向。AC代码#include <cstdio>inline int read() ...
2019-10-22 10:26:26
320
原创 POJ1733 Parity game 扩展域并查集
题目链接http://poj.org/problem?id=1733分析与程序自动分析那道题不同,a≠ba \neq ba=b,b≠cb \neq cb=c,并不意味着 a=ca = ca=c;而本题和关押罪犯类似,aaa 与 bbb 不在一间牢房,bbb 与 ccc 不在一间牢房,则 aaa 与 ccc 必在一间牢房;可以额外开一倍节点来记录不等关系,分析与带权并查集做法类似。...
2019-10-22 07:42:42
196
原创 POJ1733 Parity game 带权并查集
题目链接http://poj.org/problem?id=1733分析若 (l,r)(l, r)(l,r) 结果为奇数,说明前缀和 sum[r]sum[r]sum[r] 和 sum[l−1]sum[l - 1]sum[l−1] 奇偶性相反;反之则说明二者奇偶性相同;用并查集的节点表示每个位置的前缀和,维护每个节点与父亲的异或和即可。AC代码#include <cstdio&g...
2019-10-21 21:23:58
173
原创 NOI2002 银河英雄传说 带权并查集
题目链接http://noi-test.zzstep.com/contest/0x40%E3%80%8C%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E8%BF%9B%E9%98%B6%E3%80%8D%E4%BE%8B%E9%A2%98/4101%20%E9%93%B6%E6%B2%B3%E8%8B%B1%E9%9B%84%E4%BC%A0%E8%AF%B4分析...
2019-10-21 20:08:24
521
原创 POJ1456 Supermarket 并查集
题目链接http://poj.org/problem?id=1456分析除了堆可以来实现贪心做法,并查集也可行;先将商品按利润不增排序,依次考虑每件商品,尽量将其放在不过期且靠后时卖出;用并查集来维护每天及此前最靠后的空闲位置,每选定一天,则将其加入到其前一天所在集合。AC代码#include <cstdio>#include <algorithm>us...
2019-10-21 19:16:30
188
原创 【NOI2015】程序自动分析 并查集
题目链接https://www.luogu.org/problem/P1955分析很显然可以用并查集来维护关系;先处理相等关系再处理不等关系;对于相等关系则合并,对于不等关系,若两个操作数已在同一集合则无法满足;数据范围过大需要离散化,此题不可以像关押罪犯那样用补集维护不等关系。AC代码#include <cstdio>#include <algorithm>...
2019-10-21 18:30:48
222
原创 POJ2311 Cutting Game 博弈论
题目链接http://poj.org/problem?id=2311分析和Nim游戏有异曲同工之妙,只不过最终局面的胜负规定不同,所以需要一步转化,易知,若长或宽为 111,则先手必胜,而 2×22 \times 22×2、2×32 \times 32×3 和 3×23 \times 23×2 则是必败;故设上面三个必败态的SG函数为 000,而某张纸对应的SG函数则是来源于将其剪开后...
2019-10-20 16:00:42
193
原创 洛谷 P3377 【模板】左偏树(可并堆)
题目链接https://www.luogu.org/problem/P3377分析题目要求堆支持合并操作,左偏树是一种实现方式;具体来说,除了要保证堆的根最小性质,还要保证右子树到叶子节点的最小距离不超过左子树到叶子节点的最小距离;一般来说,左偏树只需递归实现合并操作,其他操作便可轻易完成。AC代码#include <cstdio>#include <iostr...
2019-10-11 19:11:33
322
原创 洛谷 P4180 【模板】严格次小生成树
题目链接https://www.luogu.org/problem/P4180分析根据Kruskal算法的思想,(非)严格次小生成树应该是来自最小生成树的;具体来说,是将某条非树边加入到MST上,再删去产生的环里原树边中边权最大的一条;枚举加入的非树边,再用倍增算法求要删去的树边;但要求严格次小生成树,所以删去的树边不可以和插入的边权值相等,这样维护树上路径最大值的同时还要维护次大值...
2019-10-09 20:14:56
277
原创 HDOJ2586 How far away ?LCA
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2586分析数据规模较大,用Tarjan求LCA的方法来求树上两点间路径长度;dis(x,y)=depth[x]+depth[y]−2∗depth[lca(x,y)]dis(x, y) = depth[x] + depth[y] - 2 * depth[lca(x, y)]dis(x,y)=dept...
2019-10-09 16:10:48
193
原创 洛谷 P2341 【HAOI2006】受欢迎的牛
题目链接https://www.luogu.org/problem/P2341分析Tarjan缩点,最后DAG中,唯一的出度为 000 的点的大小即为答案。AC代码#include <cstdio>#include <algorithm>#include <stack>using namespace std;inline int read(...
2019-10-09 11:19:50
220
原创 洛谷 P5410 【模板】扩展KMP
题目链接https://www.luogu.org/problem/P5410分析国外一般称此算法为Z Algorithm,个人感觉算法思想上和Manacher算法更为接近;设 next[i]next[i]next[i] 表示模式串 SSS 后缀 i...ni ... ni...n 与 SSS 的最大公共前缀长度;若已求 next[1...x−1]next[1 ... x - 1]nex...
2019-10-09 09:59:43
199
原创 洛谷 P5357 【模板】AC自动机(二次加强版)
题目链接https://www.luogu.org/problem/P5357分析相对于一般的AC自动机(或者常写的Trie图),本题卡时主要在查询时暴力向上跳 failfailfail 指针;优化方法是按拓扑序更新答案,复杂度为 O(∣T∣)O(|T|)O(∣T∣),具体来说,按求 failfailfail 时BFS序的倒序依次更新每个节点对应答案。注意模式串会有重复。AC代码...
2019-10-08 17:11:40
189
原创 操作树
例题维护一个序列,支持以下 333 种操作:在序列末尾插入元素;撤销若干次 111 和 222 操作;查询序列某个位置的数。TTT 组数据,T≤5T \leq 5T≤5,对于 nnn 次操作,n≤2×105n \leq 2 \times 10 ^ 5n≤2×105,输出 333 操作的结果。分析直接模拟,维护各个历史版本的序列,复杂度是 O(n2)O(n ^ 2)O...
2019-10-08 10:48:20
404
原创 东方14ACM小组水题0027 会议召开 树
题目链接http://west14.openjudge.cn/verywater/0027/分析补集转化,关键在于求出有多少场会议不需要额外场地;假设已确定两场会议的位置,若第三场会议的位置在这两点的路径上,是符合要求的;而在两端确定的情况下,这样的点只有两端间路径长度 −1-1−1 个;统计出所有路径的长度再减去路径数量即为答案;每条边会对所有路径长度之和贡献 size[v]∗(n...
2019-10-07 21:24:53
163
原创 NOIP2018 铺设道路 递推
题目链接https://www.luogu.org/problem/P5019分析依次枚举每个位置,考虑在前一位置填好的情况下对该位置的影响;第 111 个位置要填满,此后,若下陷深度不超过前一位置,则在填前一位置时可顺便填好;若下陷深度大于前一位置,则还需填上两位置的深度差。AC代码#include <cstdio>inline int read() { int...
2019-10-06 07:22:46
186
原创 洛谷 P1407 【国家集训队】稳定婚姻 SCC
题目链接https://www.luogu.org/problem/P1407分析根据二分图匹配的性质,可以发现,若一对夫妻在一个强连通分量中,通过调整,便可再形成新的局面,是不稳定的婚姻;用Tarjan算法求出强连通分量,判断即可。AC代码#include <cstdio>#include <iostream>#include <string>...
2019-10-05 07:46:35
300
原创 洛谷 P3384【模板】树链剖分
题目链接https://www.luogu.org/problem/P3384分析树链剖分大致是将树划分为若干条轻重边和轻重链,其中关键的是重链和轻边;每次DFS先走重儿子(所在子树点数多),对生成的DFS序建立线段树维护;该序列满足重链在其中连续,子树在其中连续;对于链的操作,将两端点不断沿着重链向上走,最终走到同一条链,然后便可完成操作;对于子树的操作,记录子树大小,直接用线段树...
2019-10-04 19:39:12
189
原创 洛谷 P4718 【模板】Pollard-Rho算法
题目链接https://www.luogu.org/problem/P4718分析玄学做法,难以描述,建议参考题解:https://www.luogu.org/problemnew/solution/P4718AC代码#include <cstdio>#include <cstdlib>#include <ctime>#include <...
2019-10-03 20:46:58
391
原创 POJ3468 A Simple Problem with Integers 树状数组
题目链接http://poj.org/problem?id=3468分析树状数组维护差分序列 d[i]d[i]d[i],则序列 ppp 处的前缀和为 ∑i=1p∑j=1id[j]\sum_{i = 1}^p {\sum_{j = 1}^i d[j]}∑i=1p∑j=1id[j],d[1]d[1]d[1] 会被加 ppp 次, d[2]d[2]d[2] 会被加 p−1p - 1p−1 次,...
2019-10-03 08:09:19
181
原创 CH4201 楼兰图腾 树状数组
题目链接http://noi-test.zzstep.com/contest/0x40%E3%80%8C%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E8%BF%9B%E9%98%B6%E3%80%8D%E4%BE%8B%E9%A2%98/4201%20%E6%A5%BC%E5%85%B0%E5%9B%BE%E8%85%BE分析给出的纵坐标是按照横坐标升序给出的,...
2019-10-02 21:54:59
527
原创 POJ1961 Period KMP
题目链接http://poj.org/problem?id=1961分析KMP算法中定义了 fail[i]fail[i]fail[i] 数组来记录对于每个 iii,满足 j<ij < ij<i 且 s[1...j]=s[i−j+1,i]s[1 ... j] = s[i - j + 1, i]s[1...j]=s[i−j+1,i] 的最大的 jjj。前缀 i...
2019-10-01 23:15:42
243
原创 AcWing41 Push, Pop, GetMin 栈
题目链接https://www.acwing.com/problem/content/description/90/分析开两个栈,一个正常存放元素,一个存放以每个位置结尾的前缀中最小值。AC代码class MinStack {public: stack<int> a, b; MinStack() { } ...
2019-09-24 08:14:30
143
原创 POJ3666 Making the Grade 线性DP
题目链接http://poj.org/problem?id=3666分析利用数学归纳法可以证明,存在正确方案可以满足 BBB 中任意元素均在 AAA 中。以 BBB 单调不降为例,当 N=1N = 1N=1 时显然成立,假设 N=k−1N = k - 1N=k−1 时成立,若 Bk−1≤AkB_{k - 1} \leq A_kBk−1≤Ak,只需令 Bk=AkB_k = A_kBk...
2019-09-23 17:46:51
331
原创 CH5101 LCIS 线性DP
题目链接http://noi-test.zzstep.com/contest/0x50%E3%80%8C%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E3%80%8D%E4%BE%8B%E9%A2%98/5101%20LCIS分析类比LCS和LIS,设状态 f[i][j]f[i][j]f[i][j] 表示在 A[1...i]A[1 ... i]A[1...i] 和...
2019-09-23 15:31:36
160
原创 POJ1220 Number Base Conversion 数学
题目链接http://poj.org/problem?id=1220分析设 xxx 是 aaa 进制数,a>0a > 0a>0,令 xxx 不断除以 bbb,将所得余数倒序输出即可将 xxx 转化为 bbb 进制数。注意输入为 000 的情况。AC代码#include <cstdio>#include <cstring>#i...
2019-09-23 14:43:49
358
原创 CH0103 最短Hamilton路径 状压DP
题目链接https://www.acwing.com/problem/content/description/93/分析状压DP,状态 f[i][j]f[i][j]f[i][j] 用 nnn 位二进制数 iii 来表示每个点是否被经过,同时 jjj 记录当前路径终点,每次枚举 jjj 的前一个点,确定上一状态,转移即可,注意求最小值,先将 fff 数组置为正无穷,令 f[1][0]=0f[1...
2019-09-23 14:43:20
293
原创 CH0102 64位整数乘法 数学
题目链接https://www.acwing.com/problem/content/92/分析直接乘会爆 longlonglong longlonglong,一种方法是类比快速幂,将一个因数按二进制位拆解,但每次操作复杂度是 logloglog 的;另一种方法是借助 a∗b mod p=a∗b−⌊a∗b/p⌋∗pa * b \ \ mod \ \...
2019-09-23 14:42:29
563
原创 POJ2279 Mr. Young's Picture Permutations 线性DP
题目链接http://poj.org/problem?id=2279分析kkk 的范围很小,设状态为 f[a][b][c][d][e]f[a][b][c][d][e]f[a][b][c][d][e],考虑可以从哪些状态转移得来;显然是那些合法的,且人数比该状态恰好少 111 的;我们假定从 111 到 nnn 依次安排,则合法状态要求 a≥b≥c≥d≥ea \geq b \geq c \...
2019-09-23 14:40:32
306
原创 BZOJ1257 余数之和 整除分块
题目链接https://www.lydsy.com/JudgeOnline/problem.php?id=1257分析k mod i=k−i×⌊ki⌋k \ \ mod \ \ i = k - i \times \lfloor {k \over i} \rfloork mod i=k−i×⌊ik⌋,则要...
2019-09-22 14:03:06
278
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人