摘要: "题目链接" 其实这东西很好懂的。。用来维护一次函数。 每个结点存一个值,表示x=这个区间的mid时值最大的函数的编号。 把插入线段的斜率和当前结点的斜率和大小比较来更新左右儿子的值。 查询是实际上是查询从根到这个叶节点链上的最大值。。 cpp include include using names 阅读全文
posted @ 2019-05-24 20:49 Qihoo360 阅读(184) 评论(1) 推荐(0) 编辑
摘要: "题目链接" 手写一下AC自动机(我可没说我之前不是手写的) Trie上dp,每个点的贡献加上所有是他后缀的串的贡献,也就是这个点到根的fail链的和。 cpp include include include include using namespace std; const int MAXK = 阅读全文
posted @ 2019-05-24 15:53 Qihoo360 阅读(183) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 首先想到状压dp,但是$n,m$高达100,怎么压? 容易发现,每行每列最多两个象棋,否则就直接gg了。 一个巧妙的设置状态的方式是,只需要记录到当前行有多少列是放了1个炮和2个炮。 然后每一行有3种选择:不放、放1个、放2个。分情况转移就行了。 cpp include const i 阅读全文
posted @ 2019-05-24 15:08 Qihoo360 阅读(186) 评论(0) 推荐(0) 编辑
摘要: "题目链接" $f[i][j]$表示准考证号到第$i$位,不吉利数字匹配到第$j$位的方案数。 答案显然是$\sum_{i=0}^{m 1}f[n][i]$ $f[i][j]=\sum_{k=1}^{m 1}f[i 1][k] g[k][j]$ $g[i][j]$表示不吉利数字匹配到第$i$位后加一 阅读全文
posted @ 2019-05-24 09:34 Qihoo360 阅读(424) 评论(0) 推荐(0) 编辑
摘要: "题目链接" AC自动机上dp第一题嗷。 如果直接求可读文本的数量,显然要容斥,不好搞。 于是考虑求不可读文本的数量,再用$26^m$减去其即可。 建出AC自动机,如果一个节点为单词结尾或其fail链中有节点为单词结尾,那么这个点就不能走,这个显然可以在bfs的时候顺便求出来。 然后就是大家熟知的方 阅读全文
posted @ 2019-05-18 10:37 Qihoo360 阅读(211) 评论(1) 推荐(0) 编辑
摘要: "题目链接" 这么多字符串,肯定是自动机啦。 先建出AC自动机,然后怎么表示一个安全代码没有病毒代码呢? 就是存在一条路径不经过有病毒代码段结尾的节点呗。 所以呢?有环啊!dfs一下救星了。 cpp include include include include using namespace st 阅读全文
posted @ 2019-05-17 22:06 Qihoo360 阅读(114) 评论(0) 推荐(0) 编辑
摘要: 把单词连起来,中间插入间隔符, "同" cpp include include include using namespace std; struct Node{ int fail, next[27], num; }AC[200010]; int n, u, cnt; queue q; int p[ 阅读全文
posted @ 2019-05-17 21:26 Qihoo360 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 每次匹配都不停跳fail显然太慢了,于是在每个节点和fail指向的点连一条边,构成一棵树,在这棵树上差分一下就好了。 AC自动机 就这个算法而言其实没用想象中那么难。 cpp include include include using namespace std; struct Node{ int 阅读全文
posted @ 2019-05-17 20:54 Qihoo360 阅读(278) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 马拉车+简单膜你 cpp include include include using namespace std; const int MAXN = 11000010; const int MOD = 19930726; char b[MAXN], a[MAXN = 1; } retu 阅读全文
posted @ 2019-05-11 14:16 Qihoo360 阅读(144) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 启发式合并就是~~暴力合并~~把小的合并到大的里,一个一个插进去。 并查集维护连通性,同时保证并查集的根就是所在Splay的根,这样能省去很多操作。 cpp include include using namespace std; inline int read(){ int s = 阅读全文
posted @ 2019-05-04 09:05 Qihoo360 阅读(222) 评论(1) 推荐(0) 编辑
摘要: 对你没看错,是退役祭。 Day 2 春游。~~话说为什么又是植物园?~~ Day 1 白天上文化课,晚上给机房其它童鞋出题。 Day 0 给他们考试,~~然后颓3Dmaze,毕竟没网~~ Day 1 车上复习了下模板~~事实证明这并没有用~~ 进考场,发现好多穿$CJ$校服的~~虽然一个认识的都没有 阅读全文
posted @ 2019-04-07 23:32 Qihoo360 阅读(247) 评论(1) 推荐(0) 编辑
摘要: "题目链接" 次短路模板题。 对每个点记录最短路和严格次短路,然后就是维护次值的方法了。 和 "这题" 一样。 阅读全文
posted @ 2019-04-05 09:17 Qihoo360 阅读(232) 评论(1) 推荐(0) 编辑
摘要: "题目链接" 被自己的sb错误调到自闭。。 主席树的进阶应用。 把$P_i$离散化一下,得到每个$P_i$的排名,然后建一棵维护$m$个位置的主席树,每个结点记录区间总和和正在进行的任务数。 差分一下,主席树维护前缀和,每个时刻一个$root$。 然后就是线段树里查前$k$小了。 cpp inclu 阅读全文
posted @ 2019-03-29 21:59 Qihoo360 阅读(139) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 树剖傻逼题,练练手好久没写树剖了。 查询忘记$pushdown$抓了好久虫。。 全文手写,一遍过。。。 cpp include const int MAXN = 500010; inline int read(){ int s = 0, w = 1; char ch = getchar 阅读全文
posted @ 2019-03-22 21:27 Qihoo360 阅读(251) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 环形均分纸牌。 设平均数为$ave$,$g[i]=a[i] ave$,$s[i]=\sum_{j=1}^ig[i]$。 设$s$的中位数为$s[k]$,则答案为$\sum |s[i] s[k]|$ 博主太菜,无法给出证明。 cpp include include using names 阅读全文
posted @ 2019-03-16 12:05 Qihoo360 阅读(117) 评论(1) 推荐(0) 编辑
摘要: "题目链接" 环形均分纸牌,既然是网络流23题的那就用网络流做把。 套路拆点。 供需平衡。 源点向大于平均数的点的入点连流量为这个数减去平均数的差,费用为0的边,表示需要移走这么多。 小于平均数的点的出点向汇点连流量为平均数减去这个数的差,费用为0的边,表示可以容纳这么多。 然后相邻入点两两连边,入 阅读全文
posted @ 2019-03-16 12:00 Qihoo360 阅读(159) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 首先有$n$条路径,每条路径就是一个点,然后尽量合并,答案就是点数 合并数。 套路拆点,源连入,出连汇,原有的边入出连。 最大流就是最大合并数,第一问解决。 然后怎么输出方案? 我是找到所有路径中的最后一个点,然后根据残量网络一直往前跳,$dfs$倒序输出。 cpp include i 阅读全文
posted @ 2019-03-16 11:27 Qihoo360 阅读(188) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 用最多经过$k$条经过$0$的路径覆盖所有点。 定义$ds[i][j]$表示从$i$到$j$不经过大于$max(i,j)$的点的最短路,显然可以用弗洛伊德求。 然后每个点拆成入出点,连边 源点向$0$的入点连流量k费用0的边,表示最多经过$0$K次 源点向其余每个点的入点连流量1费用0 阅读全文
posted @ 2019-03-16 10:43 Qihoo360 阅读(171) 评论(1) 推荐(0) 编辑
摘要: "题目链接" 第一问就是简单的最大流。 第二问,保留第一问求完最大流的残量网络。 然后新建一个源点,向原源点连一条流量为k,费用为0的边。 然后所有边重新连一起(原来的边保留),费用为题目所给,最小费用即为第二问答案,很好理解。 cpp include include include define 阅读全文
posted @ 2019-03-15 21:31 Qihoo360 阅读(124) 评论(0) 推荐(0) 编辑
摘要: "题目链接" sb错误调了3hour+。。 bfs预处理出每个$.$到每个$D$的最短距离。 二分时间$t$,把每个$D$拆成$t$个点,这$t$个点两两连边,流量$INF$表示$t$个时刻都可以从这个$D$出。 然后枚举所有$.$,再枚举所有$D$,如果距离$dis$小于$t$,就从这个$.$向这 阅读全文
posted @ 2019-03-15 20:50 Qihoo360 阅读(136) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 感觉跟餐巾计划问题有点像。费用流。 决定每天买不买不太好搞,不如先把所有东西都买进来,再卖掉不必要的。 拆点,每个点拆成$x,y$。 源点向每个点的$x$连费用为当天的价格,流量为1的边。 每个点的$y$向汇点连费用为0,流量为1的边。 每个点$x$向$y$连流量为1,费用为0的边。 阅读全文
posted @ 2019-03-11 23:56 Qihoo360 阅读(126) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 首先是可以$O(n^2)$枚举出所有符合要求的点对的,然后考虑建图。 还是拆点把每个点拆成入点和出点,源点连入点,出点连汇点,流量都是1,费用都是0。 然后对于没对符合要求的$(x,y)$,连接$(x_{in},y_{out}),(y_{in},x_{out})$,费用均为$x+y$, 阅读全文
posted @ 2019-03-09 11:46 Qihoo360 阅读(200) 评论(1) 推荐(0) 编辑
摘要: "题目链接" 回路限制经典题。 每个点拆成入点和出点,源点连每个点的出点,流量1,费用0,每个点出点连汇点,流量1,费用0,入点和出点之间没有边。 也就是说每个点必须靠其他点流来的流量来流入汇点,同时自己的流量流出去,这时候就会形成环,只要把所有流量流满,就必定是题目要求的情形。 所以每个点向前后左 阅读全文
posted @ 2019-03-09 09:47 Qihoo360 阅读(156) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 每层每个位置向下一层这个位置连边,流量为下一层这个位置的$f$,源点向第一层连,流量第一层每个位置的费用,最后一层向汇点连,流量$INF$。 这样就得到了$P Q$条链,不考虑$D$的限制的话求最小割就是答案。 现在加入限制。~~记结论吧,我也不知道什么原理~~ 每个位置从$i=D+1 阅读全文
posted @ 2019-03-09 09:22 Qihoo360 阅读(264) 评论(1) 推荐(0) 编辑
摘要: 好久没写斜率优化板子都忘了, 硬是交了十几遍。。 推一下柿子就能得到答案为 $$m \sum x^2 (\sum x)^2$$ 后面是个定值,前面简单dp,斜率优化一下就行了。 $f[i][j]=f[k][j 1]+sum[i] sum[i] 2sum[i]sum[k]+sum[k] sum[k]$ 阅读全文
posted @ 2019-03-01 21:56 Qihoo360 阅读(155) 评论(1) 推荐(0) 编辑
摘要: "题目链接" 如果$j include using namespace std; inline int read(){ int s = 0, w = 1; char ch = getchar(); while(ch '9'){ if(ch == ' ') w = 1; ch = getchar(); 阅读全文
posted @ 2019-02-15 10:50 Qihoo360 阅读(259) 评论(1) 推荐(0) 编辑
摘要: "题目链接" 不是双倍经验我会去$debug$一上午? 一开始我是用的$map+string$,跑的太慢了,T了4个点。 后来我手写了$string$,重载了小于号,依然用的$map$,T了2个点。 然后我加入各种卡常,发现没有用。 $\cdots$ 然后我把手写$string$改成字符串哈希,依然 阅读全文
posted @ 2019-02-14 14:46 Qihoo360 阅读(192) 评论(1) 推荐(0) 编辑
摘要: "题目链接" 把每个星星作为左下角,做出长为$w 0.5$,宽为$h 0.5$的矩形。 $ 0.5$是因为边框上的不算。 离散化$y$坐标。 记录$2n$个$4$元组$(x,y1,y2,light)$,$light$指这颗星星的亮度,左正右负。 然后线段树每次在$[y1,y2]$上加上$light$ 阅读全文
posted @ 2019-02-13 11:53 Qihoo360 阅读(366) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 简单处理一下输入,$fft$模板题。 cpp include include include include define re register using namespace std; const int MAXN = 1000010; const double PI = M_PI 阅读全文
posted @ 2019-02-13 08:56 Qihoo360 阅读(235) 评论(0) 推荐(0) 编辑
摘要: "题目链接" $$\Huge{E_i=\sum_{j=1}^{i 1}\frac{q_j}{(i j)^2} \sum_{j=i+1}^{n}\frac{q_j}{(i j)^2}}$$ 设$A[i]=q[i]$,$B[i]=\frac{1}{i^2}$,$A\times B$就能得到第一个$\su 阅读全文
posted @ 2019-02-12 20:58 Qihoo360 阅读(184) 评论(2) 推荐(0) 编辑
摘要: "题目链接" $\Huge\text{无图,慎入}$ $FFT$即快速傅里叶变换,用于加速多项式乘法。 如果暴力做卷积的话就是一个多项式的每个单项式去乘另一个多项式然后加起来,时间复杂度为$O(n^2)$。 $FFT$算法基本思想是把系数表达式转换成点值表达式,求出卷积的点值表达式,再转换回系数表达 阅读全文
posted @ 2019-02-12 11:06 Qihoo360 阅读(342) 评论(4) 推荐(0) 编辑
摘要: "题目链接" 一开始不理解为什么不能直接用$Tarjan$跑出换直接求出最小值,然后想到了“简单环”,恍然大悟。 二分答案,把所有边都减去$mid$,判是否存在负环,存在就$r=mid$。 ~~别的题都卡dfs,这题卡bfs~~ cpp include include define INF 2147 阅读全文
posted @ 2019-02-11 20:07 Qihoo360 阅读(155) 评论(4) 推荐(0) 编辑
摘要: "题目链接" 维护子树信息向来不是$LCT$所擅长的,~~所以我没搞懂qwq~~ 权当背背模板吧。 "Flash巨佬的blog" 里面写了~~虽然我没看懂~~。 cpp include define R register int define I inline void define lc c[x] 阅读全文
posted @ 2019-02-11 10:12 Qihoo360 阅读(219) 评论(3) 推荐(0) 编辑
摘要: "题目链接" 看到这题我想到了以前做过的一题,名字记不清了,反正里面有“矩阵”二字,然后是道二分图匹配的题。 经典的行列连边网络流。 第$i$行和第$j$列连边,费用为$b[i][j] a[i][j]\times mid$,源点连行,列连汇点,跑最小费用最大流得到的最小费用取负,这个值就是最大的$\ 阅读全文
posted @ 2019-02-11 10:08 Qihoo360 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 01分数规划指的是这么一类问题: 有两个长度为$n$的数列$a$和$b$,要求使下式值最大 $$\frac{\sum_{i=1}^na_i\times c_i}{\sum_{i=1}^nb_i\times c_i}$$ 其中$c_i=0$或$1$ 就是对于每组$a,b$由你决定选与不选,使得选出的所 阅读全文
posted @ 2019-02-02 19:42 Qihoo360 阅读(156) 评论(0) 推荐(0) 编辑
摘要: "题目链接" Tree Ⅱ$=$【模板】LCT+【模板】线段树2。。 分别维护3个标记,乘的时候要把加法标记也乘上。 还有就是模数的平方刚好爆$int$,所以开昂赛德$int$就可以了。 我把初始化放在连边的那个循环里了,而那个循环是$1$到$n 1$的,所以第$n$个没初始化到。。$WA$了好久。 阅读全文
posted @ 2019-01-29 11:56 Qihoo360 阅读(184) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 把每个点和能跳到的点连边,于是就构成了一个森林。 查询操作就是该点到根的路径长度,修改操作就相当于删边再重新连边。 显然是$LCT$的强项。 查询时$access(x),splay(x)$,然后输出$size[x]$就行了。 修改时$access(x),splay(x)$,然后双向断掉 阅读全文
posted @ 2019-01-29 09:59 Qihoo360 阅读(147) 评论(0) 推荐(0) 编辑
摘要: "题目链接" 做出二维$ST$表,然后$O(n^2)$扫一遍就好了。 cpp include include include using namespace std; const int MAXN = 1010; const int MAXLOGN = 12; int Max[MAXN][MAXN] 阅读全文
posted @ 2019-01-28 20:04 Qihoo360 阅读(185) 评论(0) 推荐(0) 编辑
摘要: "题目链接" LCT裸题。。 阅读全文
posted @ 2019-01-28 19:09 Qihoo360 阅读(127) 评论(0) 推荐(0) 编辑
摘要: "题目链接" $RT$。 "FlashHu巨佬的博客" cpp include define R register int define I inline void define lc c[x][0] define rc c[x][1] const int MAXN = 300010; inline 阅读全文
posted @ 2019-01-28 17:51 Qihoo360 阅读(219) 评论(0) 推荐(0) 编辑
You're powerful!