09 2018 档案
摘要:P2286 [HNOI2004]宠物收养场 splay 我们只需要一棵splay 如果有宠物剩下,那么此时就是宠物树。领走的时候查找并删去树内元素,反之亦然。
阅读全文
摘要:P2503 [HAOI2006]均分数据 模拟退火+dp (不得不说,我今天欧气爆棚) 随机出1个数列,然后跑一遍dp统计
阅读全文
摘要:P1337 [JSOI2004]平衡点 / 吊打XXX 模拟退火 模拟退火入门题
阅读全文
摘要:P2042 [NOI2005]维护数列 splay 毒瘤模板splay 自行体会
阅读全文
摘要:P3313 [SDOI2014]旅行 树链剖分+动态线段树(并不是lct) 显然的,我们对于每一个宗教都要维护一个线段树。 (那么空间不是爆炸了吗) 在这里引入:动态开点线段树 就是需要的点开起来,不需要的就不开。 其他地方和正常的线段树差不多 这样可以省下一堆空间。 code:
阅读全文
摘要:P2486 [SDOI2011]染色 树链剖分 用区间修改线段树维护 对于颜色段的计算:sum[o]=sum[lc]+sum[rc] 因为可能重复计算,即左子树的右端点和右子树的左端点可能颜色相同 多开2个数组lx,rx记录左/右端点的颜色,重复的话 sum[o]- - 即可 (我的错误模板坑了我2
阅读全文
摘要:P2146 [NOI2015]软件包管理器 树链剖分 带区间修改线段树 install操作:该点到根之间修改成1 uni操作:该点及其子树修改成0 每次操作时和上次的相减一下即可
阅读全文
摘要:P3178 [HAOI2015]树上操作 树链剖分模板简化(右转模板区) ps:当天晚上,我发现自己的模板是错的。(™还过了,坑死)
阅读全文
摘要:P3805 【模板】manacher算法 manacher manacher算法:线性时间处理字符串中的最长回文串长度
阅读全文
摘要:P4555 [国家集训队]最长双回文串 manacher 用manacher在处理时顺便把以某点开头/结尾的最长回文串的长度也处理掉。 然后枚举。
阅读全文
摘要:Description 母亲节就要到了,小 H 准备送给她一个特殊的项链。这个项链可以看作一个用小写字 母组成的字符串,每个小写字母表示一种颜色。为了制作这个项链,小 H 购买了两个机器。第一个机器可以生成所有形式的回文串,第二个机器可以把两个回文串连接起来,而且第二个机器还有一个特殊的性质:假如一
阅读全文
摘要:Description 给出一个长度为N的数列{a[n]},1<=a[i]<=M(1<=i<=N)。 现在问题是,对于1到M的每个整数d,有多少个不同的数列b[1], b[2], ..., b[N],满足: (1)1<=b[i]<=M(1<=i<=N); (2)gcd(b[1], b[2], ...
阅读全文
摘要:P2272 [ZJOI2007]最大半连通子图 Tarjan缩点+拓扑排序 attention:注意判断新图中的重边 先用Tarjan缩点,处理出每个分量的大小。 然后建个新图,设叶子节点的方案数为1,蓝后跑一遍拓扑排序即可。 code:
阅读全文
摘要:P1852 [国家集训队]跳跳棋 lca+二分 详细解析见题解 对于每组跳棋,我们可以用一个三元组(x,y,z)表示 我们发现,这个三元组的转移具有唯一性,收束性 也就是说,把每个三元组当成点,以转移关系为边,那么可以得到一棵树 显然最短步数==lca 然后我们就可以愉快地跑lca了 但是还要加优化
阅读全文
摘要:SP211 PRIMIT - Primitivus recurencis 欧拉回路 Warning: enormous Input/Output data 警告:巨大的输入/输出 经过若干(11)次提交后,我终于明白了,真的要把数组开大。 题意: 给定 t 组数据,每组数据有n条有向边(对,没给范围
阅读全文
摘要:UVA302 John's trip 欧拉回路 attention: 每次输入数据结束后,先用入度判断图是否满足回路的条件。 满足的话跑一遍dfs即可。 需要注意格式。
阅读全文
摘要:P4281 [AHOI2008]紧急集合 / 聚会 lca 题意:求3个点的lca,以及3个点与lca的距离之和。 性质:设点q1,q2,q3 两点之间的lca t1=lca(q1,q2) t2=lca(q1,q3) t3=lca(q2,q3) 一定有两个lca重合 3个点的公共lca一定在 两个l
阅读全文
摘要:P4145 上帝造题的七分钟2 / 花神游历各国 线段树 区间开方线段树 其实也可以分块写 不管数有多大,那么开方若干次后一定是0/1,这时就无需继续开方,有一个tag标记维护即可。
阅读全文
摘要:P1311 选择客栈 RMQ+二分(当然这并不是正解) 对于每一个客栈,二分满足条件的范围,在RMQ上查询。
阅读全文
摘要:P2880 [USACO07JAN]平衡的阵容Balanced Lineup RMQ RMQ模板题 静态求区间最大/最小值 (开了O2还能卡到rank9)
阅读全文
摘要:P3627 [APIO2009]抢掠计划 Tarjan缩点+最短(最长)路 显然的缩点...... 在缩点时,顺便维护每个强连通分量的总权值 缩完点按照惯例建个新图 然后跑一遍spfa最长路,枚举每个有酒吧的点即可 (但是我为什么会搞dp呢.......) dp:81pts (这么显然的最长路,为什
阅读全文
摘要:P1262 间谍网络 Tarjan缩点 我们用Tarjan缩完点后,剩下若干个DAG图。 我们发现,只要每个图的根所对应的强连通分量上有某人能被收买,显然整个DAG上的人都能被收买。 于是我们就在Tarjan的过程中顺便维护每个强连通分量的对应最小费用,也就是分量中价格最便宜的那个人。 (终于找到我
阅读全文
摘要:P4878 [USACO05DEC]layout布局 差分约束 最短路径最长路,最长路径最短路 本题求的是最长路径,所以跑最短路 根据题意连边,然后spfa即可 注意要判断图的连通性,所以新建一个虚拟节点n+1,先跑一次检查是否合法
阅读全文
摘要:P1948 [USACO08JAN]电话线Telephone Lines 最短路spfa 暴力分层spfa。没了。(luogu数据太水,正解二分+spfa都没用上)
阅读全文
摘要:P3275 [SCOI2011]糖果 差分约束 屈服于spfa(用堆优化dj蜜汁TLE) 差分约束模板题吧(大概) 但是数据很毒瘤。 对于5种情况,我们发现这都是A-B>=0/1 或 B-A>=0/1 的形式 我们可以转化为 B+0/1 <= A ,也就是求最长路 但是我写的dj被卡了。于是就用sp
阅读全文
摘要:P4735 最大异或和 P4735 最大异或和 P4735 最大异或和 可持久化Trie 据n^n=0,我们可以把问题转化为前缀异或和(设为s[i]),也就是求 s[n]^s[p] 的最大值 显然,这是经典的Trie上贪心问题。但是询问次数过多,我们总不能每次都建一棵完整的树。 注意到,对于每次询问
阅读全文
摘要:P3008 [USACO11JAN]道路和飞机Roads and Planes Dijkstra+Tarjan 因为题目有特殊限制所以不用担心负权的问题 但是朴素的Dijkstra就算用堆优化,也显然会超时。 这是因为Dj每次扩展时,总是找到费用最小那个点进行扩展。 而本题的毒瘤数据可以在一个图(设
阅读全文
摘要:P4009 汽车加油行驶问题 最短路 清一色的spfa....送上一个堆优化Dijkstra吧(貌似代码还挺短) 顺便说一句,堆优化Dj跑分层图灰常好写
阅读全文
摘要:P1073 最优贸易 P1073 最优贸易 P1073 最优贸易 最短路 (分号逗号傻傻分不清???) 我们从起点开始沿着正向边跑一遍dijkstra,求出从起点到某个点所经过的城市中水晶球售价最小是多少 我们从终点开始沿着反向边跑一遍dijkstra,求出从终点到某个点所经过的城市中水晶球售价最大
阅读全文
摘要:P2260 [清华集训2012]模积和 整除分块+逆元 详细题解移步P2260题解板块 式子可以拆开分别求解,具体见题解 这里主要讲的是整除分块(数论分块)和mod不为素数时如何求逆元 整除分块:求Σ「n/i」(i=1~n),「」表示向下取整 由于「n/i」在某段区间内都有相同的值,所以可以分块算,
阅读全文
摘要:P2865 [USACO06NOV]路障Roadblocks 最短路(次短路) 直接在dijkstra中维护2个数组:d1(最短路),d2(次短路),然后跑一遍就行了。 attention:数据有不同权值的重边(40ptsQAQ)
阅读全文
摘要:P1821 [USACO07FEB]银牛派对Silver Cow Party 最短路Dijkstra 十分显然地,做两遍最短路。 原图跑一遍(出行),反向图跑一遍(归程)。把每个点的2次最短路的结果之和拿来做比较即可。
阅读全文
摘要:P4180 【模板】严格次小生成树[BJWC2010] 倍增(LCA)+最小生成树 施工队挖断学校光缆导致断网1天(大雾) 考虑直接枚举不在最小生成树上的边。但是边权可能与最小生成树上的边相等,这样删边时权值不改变,就不满足条件了 所以我们可以先用倍增处理出最小生成树上任意2点之间的最大边权和次大边
阅读全文
摘要:P4208 [JSOI2008]最小生成树计数 矩阵树定理+最小生成树 神犇的题解 ↑↑需要的2个定理 根据定理,我们需要求出的是每层相同权值的生成树方案之积 所以在最小生成树求解过程中嵌入计算过程:每次建一个新图,计算新图行列式的值。 因为模数不是质数所以高斯消元就用辗转相除了
阅读全文
摘要:P4001 [BJOI2006]狼抓兔子 最短路+对偶图 看这题最容易想到的就是网络流。Dinic可以过,据说还跑得比正解快。 如果不写网络流,那么需要知道2个前置知识:平面图和对偶图(右转baidu) 我们把图转成对偶图。特别的,图外面的空间沿左上-右下(起点-终点)切开,作为虚拟起点/终点。 然
阅读全文
摘要:P4336 [SHOI2016]黑暗前的幻想乡 矩阵树定理(高斯消元+乘法逆元)+容斥 ans=总方案数 -(公司1未参加方案数 ∪ 公司2未参加方案数 ∪ 公司3未参加方案数 ∪ ...... ∪ 公司n未参加方案数) 方案数=生成树方案数 所以用矩阵树定理瞎搞 显然后面的部分可以用容斥原理求解
阅读全文
摘要:P4111 [HEOI2015]小Z的房间 矩阵树定理 高斯消元 矩阵树定理:一个图的(度数矩阵-邻接矩阵)的行列式的值是图中所有生成树的方案数 求行列式:把行列式去掉任意一行和一列,转成上三角矩阵,矩阵对角线上元素之积即为行列式的值 于是我们可以用高斯消元把另一半消掉,因为模数并不是质数,所以用辗
阅读全文
摘要:P4574 [CQOI2013]二进制A+B 数位dp 设f[ i ][ a ][ b ][ c ][ 0/1 ]表示在第 n-i 位,A、B、C各贡献了a、b、c个1,是否需要进位的情况下,c的最小值 然后对于8种情况枚举
阅读全文
摘要:P3810 【模板】三维偏序(陌上花开) cdq分治+树状数组 三维偏序模板题 前两维用cdq分治,第三维用树状数组进行维护 就像用树状数组搞逆序对那样做 >存权值的出现次数 attention:当两个元素完全相同时要重复计算
阅读全文
摘要:P3374 【模板】树状数组 1 cdq分治 刚学了cdq分治(dyf神犇强力安利下),发现可以做这种题,当然是来试水了(逃 cdq好像只能离线的样子 cdq分治(转) 以下是摘录的几句: 在合并的时候,我们只处理左区间的修改,只统计右区间的查询 因为左区间的修改一定可以影响右区间的查询 这就体现出
阅读全文
摘要:P4168 [Violet]蒲公英 分块 吸了氧气才过 强制在线区间众数,具体见hzwer的解题报告(右转Baidu) 先把数字离散化 然后对于每个数字开个动态数组存出现的位置 每次对完整块的众数和不完整块的所有数在动态数组中进行查询,答案必定在它们之中 code:
阅读全文
摘要:分块1~9传送门 思想不写(baidu分块第一hzwer巨佬) 仅给出code attention:一定要分清楚位置 i 和 所在块 blo[ i ]!(倒在这好几次QAQ) 分块1:区间加法,单点查值 分块2:区间加法,询问区间内小于某个值的元素个数。 分块3:区间加法,询问区间内小于某个值 xx
阅读全文
摘要:P2455 [SDOI2006]线性方程组 (upd 2018.11.08: 这才是真正的高斯消元模板) 找到所消未知数(设为x)系数最大的式子,把它提上来 把这个式子的 x 系数约成1 把这个式子用来把其他式子的x消掉 重复直到只剩一个未知数,然后往回带
阅读全文
摘要:LOJ10067 构造完全图 最小生成树 每次找到最小的边,将边两端的块合并 (我之前想的是什么鬼)
阅读全文
摘要:LOJ10066 新的开始 prim 典型题。碰到这种情况,只要建一个虚拟节点,和其他的点连边,按题目给权值即可 代码中把n+1当成虚拟节点 懒得写kruskal就用prim了
阅读全文
摘要:堆优化prim 应用:bzoj1601: [Usaco2008 Oct]灌水
阅读全文
摘要:P2414 [NOI2011]阿狸的打字机 AC自动机+树状数组 优质题解 < 题目分析 先AC自动机搞出Trie图 然后根据fail指针建一只新树 把树映射(拍扁)到一个序列上,用树状数组加速优化 在新树上处理时间戳,用于树状数组维护 在原Trie树上跑dfs查询答案。 因为Trie下标从0开始,
阅读全文
摘要:P2322 [HNOI2006]最短母串问题 AC自动机+bfs 题目要求:在AC自动机建的Trie图上找到一条最短链,包含所有带结尾标记的点 因为n<12,所以我们可以用二进制保存状态:某个带结尾标记的点是否被处理到。 把编号为 i 的结尾标记设为2^(i-1) 然后跑一遍bfs,如果跑到某个点结
阅读全文
摘要:P4052 [JSOI2007]文本生成器 AC自动机+dp 优秀题解传送门 设f[ i ][ j ]表示串的长度为 i ,当前在 j 点时不可识别的串的方案数 最后用总方案数减去不可识别方案数就是答案了 因为题解写的很好所以我就只在代码中加点注释了(逃
阅读全文
摘要:P3121 [USACO15FEB]审查(黄金)Censoring (Gold) (银的正解是KMP) AC自动机+栈 多字符串匹配 >AC自动机 删除单词的特性 >栈 所以我们先打个AC自动机模板 然后搞2个栈维护: 每次碰到有结尾标记的点,就让2个栈弹出这个点所对应的单词的长度 最后输出第二个栈
阅读全文
摘要:P3966 [TJOI2013]单词 AC自动机 题意:输入若干个单词,对于每个单词,计算它在所有单词中出现的次数(原题讲的什么鬼)。 attention:有重复单词,还很多 显然,我们可以用AC自动机来搞 但是对每个单词都需要跑一遍要用极大的空间来存-->MLE。 于是我们想到用一个主串把这些单词
阅读全文
摘要:P2444 [POI2000]病毒 AC自动机(模板题) 题解传送门 一个重要的性质(同样适用于KMP):一个串末尾节点的fail数组指向的子串一定是这个串的后缀 (我真的不想再忘了) 我们的目标是在AC自动机的图中找到一个环,里面没有任何病毒标记 和以往的AC自动机不同,我们在匹配的过程中要避开病
阅读全文
摘要:P3294 [SCOI2016]背单词 Trie+贪心 倒插进树+取出重建+子树处理+贪心遍历 倒插进树:把后缀转化为前缀,所以把字符串倒着插进Trie中 取出重建:重新建立一棵以单词为节点的树,如果存在包含(前缀)关系就连边 子树处理:处理出每棵树的大小用于贪心 贪心遍历:遍历整棵新树,累加答案
阅读全文
摘要:P2922 [USACO08DEC]秘密消息Secret Message Trie Trie典型统计题 在这题中,我们不是单纯的统计一个串是否是另一个串的前缀,而要统计数量。 在这里,我们引入一个tot标记,表示有多少串包含这个节点(不累计串的结尾)。 当询问的串在路径上的u点时,加上的是a[ u
阅读全文
摘要:P2292 [HNOI2004]L语言 Trie+论快读的重要性 加了快读TLE --> <=200ms 事实证明对于这种大量读入字符的题我们要手!写!快!读!(getchar大法好) (然而正解是Trie+dp/AC自动机) 好了,进入正题 我们用Trie把字典存起来,然后对于所给的串,在Trie
阅读全文
摘要:UVA644 Immediate Decodability Trie Trie模板题 难度几乎相等的题 P2580 于是他错误的点名开始了 对于每组数据都清空树太浪费时间,所以我们只要在需要新点时预先把新点原有的数据清空即可。 剩下除了一些细节要注意,没啥要说的了 (luogu的标签系统有些迷啊)
阅读全文
摘要:P3435 [POI2006]OKR-Periods of Words 题解传送门 kmp 注意:由于题目说只要A满足是2Q的前缀,所以求的不是严格的最大循环子串(20pts) 我们需要求出的是在主串中最小的,既是前缀又是后缀的子串 利用f数组的性质:前缀i的长度为next[i]的前缀和后缀是相等的
阅读全文
摘要:P4391 [BOI2009]Radio Transmission 无线传输 kmp 题目让我们求一个串的最小循环子串 我们回想一下kmp中的失配函数 用 f 数组保存当前字符匹配失败后,需要跳到的前一个匹配字符 而题目说主串是某个子串不断自我连接形成 那么从 子串(长度设为 i )结束的后一个字符
阅读全文
摘要:P3538 [POI2012]OKR-A Horrible Poem hash+线性筛 题解 < 这篇写的不错(其实是我懒得码字了qwq) UVA10298 Power Strings 的升级版 判断一个长为 u 的子串是否为 长为 n 的主串的循环子串 只要比较 [1,n-u ]和 [u+1, n
阅读全文
摘要:P3383 【模板】线性筛素数 欧拉筛O(n) 当不需要求最小质因数,只需判断是否是质数时,用下列写法可以快2倍 1 void getphi(){ 2 phi[1]=1; 3 for(int i=2;i<=n;++i){ 4 if(!v[i]) pri[++cnt]=i,phi[i]=i-1; 5
阅读全文
摘要:P3501 [POI2010]ANT-Antisymmetry 二分+hash 注意:答案超出int范围 先拿一个反对称串来做栗子:010101 我们可以发现 0101(左边右边各削掉1个),01(左边右边各削掉2个)都是反对称串 多举几个例子,我们可以总结出一个性质:一个反对称串的所有同中心的子串
阅读全文
摘要:P3498 [POI2010]KOR-Beads 题解 hash+hash表+调和级数 关于调和级数(from baidu百科): 调和级数发散的速度非常缓慢。举例来说,调和序列前10项的和还不足100。这是因为调和数列的部分和呈对数增长。特别地, [3] 其中 是欧拉-马歇罗尼常数,而 约等于 ,
阅读全文
摘要:UVA10298 Power Strings hash+乘法逆元+一点点数学知识 我们用取余法算出主串的hash,然后从小到大枚举子串的长度 显然,如果若干个子串的复制的hash值之和等于主串的hash值,那么答案就得到了。 然后我们计算子串(设子串长度为 i )的hash值: 如果直接暴力求,那么
阅读全文
摘要:UVA1714 Keyboarding bfs 坑点很多的一题(由于一本通的辣鸡翻译会错题意*n)。 1.多组数据 2.如果某方向上没有不同字符光标不会动 我们每次预处理出每个点向四个方向下次到达的点。然后跑bfs即可 注意bfs每次只能扩展一层(也就是说距离dis每次最多只能+1,否则无法保证最优
阅读全文
摘要:P4289 [HAOI2008]移动玩具 双向bfs+状态压缩+记忆化搜索 双向bfs用于对bfs的优化,每次找到可扩展节点少的一边进行一次bfs,找到的第一个互相接触的点即为最短路径 矩阵范围仅4*4大小,我们容易想到用二进制数压缩其状态,利于求解。 既然转成二进制,大小又<2^17,那么可以再加
阅读全文
摘要:P3456 [POI2007]GRZ-Ridges and Valleys 八个方向都跑一遍bfs,顺便判断一下是山峰还是山谷,或者是山坡(俩都不是) (实在不知道要说啥了qwq)
阅读全文
摘要:P1074 靶形数独 dfs 优化搜索顺序 我们可以想到一种方法,每次找可以填的数最少的格子进行dfs。 离线 85pts 在线 100pts
阅读全文
摘要:P1283 平板涂色 dfs 记忆化搜索 将矩阵转化为图求解,然后我们发现这是个DAG,于是就可以愉快地跑搜索了。 进行dfs时,我们可以用类似拓扑排序的方法。每次将上面所有矩形都被刷过(入度in[ i ]==0)的满足条件的矩形用h数组打个标记 用incol数组表示目前h数组中有几种颜色,然后枚举
阅读全文
摘要:UVA12558 Egyptian Fractions (HARD version) 题解 迭代加深搜索,适用于无上界的搜索。每次在一个限定范围中搜索,如果无解再进一步扩大查找范围。 本题中没有分数个数和分母的上限,只用爆搜绝对TLE。故只能用迭代加深搜索。
阅读全文
摘要:P2571 [SCOI2010]传送带 三分套三分。 前提条件:P3382 【模板】三分法 三分,求区间内单峰函数的最大/最小值。 我们把两条线段都跑三分,先ab后cd,求出最小值。 可以直接将二维坐标进行三分,为了方便编写,不一定非要取三等分点。代码中取的是中点和一个四等分点。
阅读全文
摘要:P1661 扩散 二分+最小生成树(kruskal使用并查集) 不清楚的题意导致我被坑了qwq,其实间接联通也是允许的。所以可以使用并查集+最小生成树维护 每次二分答案,然后跑一遍最小生成树判断是否联通。 end.
阅读全文
摘要:P1182 数列分段`Section II` 二分答案 初始设l=0,r=1e9 然后二分答案,每次在数列中跑一遍判断是否合法即可。 复杂度 O(n log1e9) (真的要改掉我不检查就交的坏习惯qaq)
阅读全文
摘要:"P2512 [HAOI2008]糖果传递" 第一步,当然是把数据减去平均数,然后我们可以得出一串正负不等的数列 我们用sum数组存该数列的前缀和。注意 假设为链,那么可以得出答案为 但是题目说的是环 我们设在第 k 个人处断开环成链。 那么答案为 代入 后,得 = 我们把 扔到数轴上,发现问题变成
阅读全文