摘要:"题目戳这里" AC自动机上有神奇的东西叫做fail指针……所有fail指针连起来恰好构成一棵以1为根的树! 而这道题问x在y中出现过多少次,就是问Trie树上根到y的结束节点的路径上有多少节点能通过跳fail跳到x的结束节点上,即,路径上有多少节点在fail树上在x的结束节点的子树中。 那么怎么统 阅读全文
posted @ 2018-03-19 14:15 胡小兔 阅读(223) 评论(0) 推荐(0) 编辑
摘要:题目链接 "UOJ 7" 题解 首先这一定是DP!可以写出: $$f[i] = \min_{ancestor\ j} \{f[j] + (d[j] d[i]) p[i] + q[i]\}$$ 其中$d[i]$表示树上$i$的深度。 整理一下式子: $$f[i] = \min_{ancestor\ j 阅读全文
posted @ 2018-03-19 11:44 胡小兔 阅读(499) 评论(0) 推荐(0) 编辑
摘要:```c++ include include include include include include define space putchar(' ') define enter putchar('\n') using namespace std; typedef long long ll; 阅读全文
posted @ 2018-03-15 13:24 胡小兔 阅读(317) 评论(0) 推荐(0) 编辑
摘要:什么是线段树合并? 首先你需要动态开点的线段树。(对每个节点维护左儿子、右儿子、存储的数据,然后要修改某儿子所在的区间中的数据的时候再创建该节点。) 考虑这样一个问题: 你现在有两棵权值线段树(大概是用来维护一个有很多数的可重集合那种线段树,若某节点对应区间是$[l, r]$,则它存储的数据是集合中 阅读全文
posted @ 2018-03-06 18:41 胡小兔 阅读(4255) 评论(2) 推荐(6) 编辑
摘要:题目链接 "UOJ 134" 题解 可爱的电音之王松松松出的题……好妙啊。 首先想一个朴素的做法! 把当前的整数的二进制当作01序列用线段树维护一下(序列的第i位就是整数中位权为$2^k$的那一位)。 如何做加法?一下子加一个整数比较麻烦,可以把整数拆成一个个二进制位,一位位地加1。如果当前要加一的 阅读全文
posted @ 2018-03-06 17:35 胡小兔 阅读(655) 评论(0) 推荐(2) 编辑
摘要:题目链接 "UOJ 164" 题解 首先,这道题有三种询问:区间加、区间减(减完对$0$取$\max$)、区间修改。 可以用一种标记来表示——标记$(a, b)$表示把原来的值加上$a$后对$b$取$\max$。 那么区间加$x$就是$(x, \infty)$,区间减$x$就是$( x, 0)$, 阅读全文
posted @ 2018-03-05 17:51 胡小兔 阅读(368) 评论(0) 推荐(0) 编辑
摘要:题目链接 题面 题目描述 在2016年,佳媛姐姐喜欢上了数字序列。因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他。这个难题是这样子的:给出一个1到n的全排列,现在对这个全排列序列进行m次局部排序,排序分为两种: 1:(0,l,r)表示将区间[l,r]的数字升序排序 阅读全文
posted @ 2018-03-04 13:46 胡小兔 阅读(300) 评论(0) 推荐(1) 编辑
摘要:题目链接 "51nod 1462" 题目描述 给一颗以1为根的树。 每个点有两个权值:vi, ti,一开始全部是零。 Q次操作: 读入o, u, d o = 1 对u到根上所有点的vi += d o = 2 对u到根上所有点的ti += vi d 最后,输出每个点的ti值(n, Q include 阅读全文
posted @ 2018-02-27 12:14 胡小兔 阅读(227) 评论(0) 推荐(1) 编辑
摘要: 阅读全文
posted @ 2018-02-22 14:14 胡小兔 阅读(347) 评论(0) 推荐(0) 编辑
摘要:题目链接 "BZOJ 3503" 题解 没想到……直接用暴力的$O((nm)^3)$算法,居然能过?! 高斯消元解异或方程组。 c++ include include include include include define space putchar(' ') define enter put 阅读全文
posted @ 2018-02-22 13:24 胡小兔 阅读(196) 评论(0) 推荐(0) 编辑
摘要:题目链接 "Luogu P3265" 题解 非常正常的线性基! 但是我不会线性基…… (吐槽: 才过……) c++ include include include include include define space putchar(' ') define enter putchar('\n') 阅读全文
posted @ 2018-02-22 11:09 胡小兔 阅读(231) 评论(0) 推荐(0) 编辑
摘要:题目链接 "BZOJ 4785" 题解 这道题真是令人头秃 = = 可以看出题面中的九条可怜把求前缀和写成了求后缀和,然后他求的区间和却仍然是sum[r] ^ sum[l 1],实际上求的是闭区间[l 1, r 1]的区间和。什么时候[l 1, r 1]的区间和与[l, r]的想等呢?就是位置l 1 阅读全文
posted @ 2018-02-20 11:18 胡小兔 阅读(660) 评论(0) 推荐(1) 编辑
摘要:题目链接 "LOJ 2145" 题解 一道画风正常的……期望DP? 首先考虑如何以最小步数熄灭所有灯:贪心地从大到小枚举灯,如果它亮着则修改它。可以求出总的最小步数,设为$cnt$。 然后开始期望DP。设$dp[i]$为当前最小步数是$i$,总最小步数是$i$,要达到最小步数是$i 1$的状态,期望 阅读全文
posted @ 2018-02-13 16:43 胡小兔 阅读(304) 评论(0) 推荐(0) 编辑
摘要:题目链接 "LOJ 2141" 题解 据说这道题可以三分(甚至二分)? 反正我是枚举的 = = 先将t和b数组排序后计算出前缀和, 然后枚举最晚的出成绩时间,每次可以O(1)直接计算调整到该时间所需的代价。 如何计算? 对于学生不满意造成的代价,是 (不满意人数 最晚结束时间) 所有不满的人的t之和 阅读全文
posted @ 2018-02-12 15:59 胡小兔 阅读(331) 评论(2) 推荐(0) 编辑
摘要:```c++ #include #include #include #include #include #include #define space putchar(' ') #define enter putchar('\n') using namespace std; typedef long long ll; template void read(T &x){ char... 阅读全文
posted @ 2018-02-12 13:59 胡小兔 阅读(346) 评论(0) 推荐(2) 编辑
摘要:这道题就是“修车”的数据加强版……但是数据范围扩大了好多,应对方法是“动态开点”。 首先先把“所有厨师做的倒数第一道菜”和所有菜连边,然后跑一下spfa,找出哪一个厨师在增广路上,把“这个厨师做的倒数第二道菜”和所有菜连边,然后继续spfa,如此循环往复直到spfa找不出最短路。 c++ inclu 阅读全文
posted @ 2018-01-22 15:31 胡小兔 阅读(230) 评论(0) 推荐(0) 编辑
摘要:传送门 "BZOJ 2668" 题解 同时分别限制流入和流出次数,所以把一个点拆成三个:入点in(x)、中间点mi(x)、出点ou(x)。 如果一个格子x在初始状态是黑点,则连(S, mi(x), 1, 0) 如果x在目标状态是黑点,则连(mi(x), T, 1, 0) 设x的交换次数限制是w 如果 阅读全文
posted @ 2018-01-21 14:57 胡小兔 阅读(156) 评论(0) 推荐(0) 编辑
摘要:传送门 "BZOJ 1565" 题解 这道题也是个经典的最大权闭合子图…… 复习一下最大权闭合子图是什么? 就是一个DAG上,每个点有个或正或负的点权,有的点依赖于另外一些点(如果选这个点,则被依赖点必选),问选出一些点的权值和最大是多少。 这个问题怎么解决? 网络流建图,被依赖点向依赖点连INF的 阅读全文
posted @ 2018-01-19 15:15 胡小兔 阅读(202) 评论(0) 推荐(0) 编辑
摘要:传送门 "BZOJ 2427" 题解 Tarjan把环缩成点,然后跑树形背包即可。 我用的树形背包是DFS序上搞的那种。 要注意dp数组初始化成 INF! 要注意dp顺推的时候也不要忘记看数组是否越界! 长太息以掩涕兮, 哀bug之难De... c++ include include include 阅读全文
posted @ 2018-01-17 11:13 胡小兔 阅读(213) 评论(0) 推荐(0) 编辑
摘要:```c++ include include include include include include using namespace std; typedef long long ll; define enter putchar('\n') define space putchar(' ') 阅读全文
posted @ 2018-01-13 13:58 胡小兔 阅读(190) 评论(0) 推荐(0) 编辑
摘要:传送门 "BZOJ 4569" 题解 ST表和并查集是我认为最优雅(其实是最好写……)的两个数据结构。 然鹅!他俩加一起的这道题,我却……没有做出来…… 咳咳。 正解是这样的: 类似ST表有$\log n$层一样,我们开$\log n$个并查集。当已知$[l_1, r_1]$和$[l_2, r_2] 阅读全文
posted @ 2018-01-11 14:54 胡小兔 阅读(161) 评论(0) 推荐(0) 编辑
摘要:传送门 "BZOJ 3195" 题解 这是一道画风正常的状压DP题。 可以想到,$dp[i][j][k]$表示到第$i$个点、已经连了$j$条边,当前$[i K, i]$区间内的点的度数的奇偶性状态是$k$(用二进制表示,度数为奇则对应位是1,反之为0)的方案数。 然后对每个状态枚举$i$要和区间$ 阅读全文
posted @ 2018-01-10 16:24 胡小兔 阅读(205) 评论(0) 推荐(1) 编辑
摘要:传送门 "BZOJ 4540" 题解 ……怎么说呢……本来想写线段树+矩阵乘法的…… ……但是嘛……yali的机房太热了……困……写不出来…… 于是弃疗,写起了莫队。(但是我连莫队都想不出来!) 首先用单调栈可以轻松求出每个元素左右两边第一个比它小的元素位置,分别设为tl[i]、tr[i]。 莫队关 阅读全文
posted @ 2018-01-09 16:30 胡小兔 阅读(345) 评论(0) 推荐(0) 编辑
摘要:传送门 "BZOJ 2752" 题解 先澄清一下题意——显然最后一个收费站是没有用的!相当于只有n 1个点,每个点代表一条道路,当题目输入$l, r$时,实际涉及的区间是$[l, r 1]$。 要求的是期望嘛,就是所有方案价值之和 / 总方案数。 当然不可能枚举每种方案,所以我们考虑每一个收费站的贡 阅读全文
posted @ 2018-01-08 17:07 胡小兔 阅读(163) 评论(0) 推荐(0) 编辑
摘要:迷啊……调了一下午…… 为什么我把splay时的update方式改成“splay最后再upt(u)一下”就不RE了…… 求大神解答……? 题目链接 "BZOJ 3669" 题解 将边按照a排序,然后从小到大枚举,加入图中。 在图中用lct维护一棵两点之间b最大值尽量小的生成树。 当加入一条边(u, 阅读全文
posted @ 2018-01-07 16:57 胡小兔 阅读(193) 评论(0) 推荐(0) 编辑
摘要:今天我遇到了一起灵异事件。 我觉得我没写过无根树lct。 于是我学习了一发。 写了这道例题。 写完觉得不是很稳。 于是决定上洛谷试着提交一发。 然后发现—— “这道题我 怎么A过?!” 好吧。 今天做了一道BZOJ收录的题,可是我的BZOJ做题量并没有增加…… 话说我之前做了这道题怎么没写博客啊…… 阅读全文
posted @ 2018-01-07 14:16 胡小兔 阅读(145) 评论(0) 推荐(0) 编辑
摘要:集训讲字符串的时候我唯一想出正解的题…… 阅读全文
posted @ 2018-01-05 09:40 胡小兔 阅读(445) 评论(0) 推荐(0) 编辑
摘要:链接 "BZOJ 4380" 题面 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i]。 有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗车店,且会选择这些店中最便宜的一个进行一次消费。但是如果这个最便宜的价格大于c[i],那么这个人就不洗车了。 请给每家店指定一个价 阅读全文
posted @ 2018-01-01 20:44 胡小兔 阅读(204) 评论(0) 推荐(0) 编辑
摘要:链接 "BZOJ 4361" 题面 给出一个长度为n的序列A(A1,A2...AN)。如果序列A不是非降的,你必须从中删去一个数, 这一操作,直到A非降为止。求有多少种不同的操作方案,答案模10^9+7。 N include include include using namespace std; 阅读全文
posted @ 2018-01-01 13:36 胡小兔 阅读(293) 评论(0) 推荐(0) 编辑
摘要:链接 "BZOJ 3631" 题解 看起来是树剖?实际上树上差分就可以解决…… 当要给一条路径(u, v) +1的时候,给d[u] += 1, d[v] += 1, d[lca(u, v)] = 1, d[fa[lca(u, v)]] = 1。 注意这道题中路径的终点是不 +1的。 c++ incl 阅读全文
posted @ 2017-12-28 19:50 胡小兔 阅读(141) 评论(0) 推荐(0) 编辑
摘要:我为什么要画这个? 首先,这是一只金色的企鹅……不是鸭子啦! "金企鹅(JQE)" 是我的一个学长,从我走上oi这条路开始,他就一直在给予我极大的帮助。 可是oi的美好时光流逝得太快,现在他已经高三了,成为了退役高考选手…… 高三的生活当然很艰辛,学长最近压力也很大。 所以我想借此机会,用洛谷冬日绘 阅读全文
posted @ 2017-12-28 17:11 胡小兔 阅读(1568) 评论(3) 推荐(3) 编辑
摘要:链接 "BZOJ 3993" 题解 这道题挺棵的…… 二分答案t,然后源点向武器连t b[i], 武器向能攻击的敌人连1, 敌人向汇点连a[i],如果最大流等于所有敌人的a[i]之和则可行。 阅读全文
posted @ 2017-12-28 10:47 胡小兔 阅读(159) 评论(0) 推荐(0) 编辑
摘要:链接 "BZOJ 2039" 题解 这题建图好神,自己瞎搞了半天,最后不得不求教了 "企鹅学长的博客" ,,,,发现建图太神了!! s向每个人连sum(e[i][x]) 的边,每个人向T连a[i]的边。两两人之间连2 e[i][j]的边即可。 最后总的e – maxflow即为答案。 为什么我就没想 阅读全文
posted @ 2017-12-28 09:57 胡小兔 阅读(131) 评论(0) 推荐(0) 编辑
摘要:链接 "BZOJ 2561" 题解 用Kruskal算法的思路来考虑,边(u, v, L)可能出现在最小生成树上,就是说对于所有边权小于L的边,u和v不能连通,即求最小割; 对于最大生成树的情况也一样。容易看出两个子问题是各自独立的,把两个最小割相加即可。 阅读全文
posted @ 2017-12-28 08:24 胡小兔 阅读(282) 评论(0) 推荐(0) 编辑
摘要:链接 "BZOJ 4873" 题解 ~~当年的~~省选题……还记得蒟蒻的我Day1 20分滚粗…… 这道题是个最大权闭合子图的套路题。严重怀疑出题人就是先画好了图然后照着图编了个3000字的题面。~~和我喜欢的妹子当年给别人写的情书一样长……~~ 最大权闭合子图 最大权闭合子图问题:一个有向图中,每 阅读全文
posted @ 2017-12-27 21:56 胡小兔 阅读(161) 评论(0) 推荐(0) 编辑
摘要:显然是个最小割嘛! 一开始我是这么建图的: 1. 源点向狼连INF 2. 羊向汇点连INF 3. 每两个相邻格子间连双向边,边权为1 然后T成狗 后来我是这么建图的: 1. 源点向狼连INF 2. 羊向汇点连INF 3. 狼和空地向相邻的非狼节点连1 然后跑得 ~~跟HK Journalist~~ 阅读全文
posted @ 2017-12-27 16:28 胡小兔 阅读(183) 评论(0) 推荐(0) 编辑
摘要:insert的时候忘了取模了…… c++ include include include include include using namespace std; typedef long long ll; define enter putchar('\n') define space putcha 阅读全文
posted @ 2017-12-27 15:18 胡小兔 阅读(158) 评论(0) 推荐(0) 编辑
摘要:三倍经验题!——然鹅窝WA了其中一个 阅读全文
posted @ 2017-12-27 13:27 胡小兔 阅读(478) 评论(0) 推荐(0) 编辑
摘要:今天颓了一会,用JavaScript给我的博客园博客写了一个页面背景随滚动而渐变的效果,做完之后自我感觉良好…… 下面就以我的博客园博客为例,介绍一下如何制作这个效果! 准备 申请博客园的JS权限(如果你也想把它用在自己的博客园上) 可能需要一些JS的基础知识(你可以打开w3school,然后就当自 阅读全文
posted @ 2017-12-26 12:44 胡小兔 阅读(1702) 评论(5) 推荐(8) 编辑
摘要:"BZOJ 3876" 支线剧情 | 有下界费用流 题意 这题题面搞得我看了半天没看懂……是这样的,原题中的“剧情”指的是边,“剧情点”指的才是点。 题面翻译过来大概是这样: 有一个DAG,每次从1号点出发,走过一条路径,再瞬移回1号点。问:想要遍历所有的边,至少要走多少路程(瞬移回1号点不算路程) 阅读全文
posted @ 2017-12-26 11:43 胡小兔 阅读(149) 评论(0) 推荐(0) 编辑