随笔分类 - OJ---BZOJ
摘要:传送门 "BZOJ" <! more Solution 显然这是一个最大权闭合子图的问题,所以你把图建出来跑网络流就是$50pts$. 接着你旋转坐标系然后把这个转换成为一个贪心替换网络流的问题,然后就是一个$set$的事了. 代码实现
阅读全文
摘要:传送门 "Loj" "BZOJ" <! more Solution 我们考虑一下设$f(x)$表示当$n$为$x$时构造二叉树的方案数,$g(x)$表示当$n$为$x$时构造二叉树的叶子节点数的总和. 仔细看一下这个句子: .$Catalan$数无疑了,接着就是解决$g(x)$是什么. 现在不是有$
阅读全文
摘要:传送门 "洛谷" "BZOJ" Solution 如果不需要动态的话,那就是一个裸的最小生成树上的最大边权对吧。 现在动态了的话,把这个过程反着来,就是加边对吧。 现在问题变成了怎么动态维护加边的最小生成树,这是一个比较常见的套路了,使用LCT(~~暴力~~)。。。 深刻理解一下Kruscal的过程
阅读全文
摘要:传送门 "BZOJ" Solution 考虑一下如果把行,列当成点,那么显然这个东西就是一个基环树对吧. 直接按照$Kruscal$那样子搞就好了. 代码实现 "代码戳这里"
阅读全文
摘要:前言 这里只是一个整理。。。 Solution "Hash Killer I" "Hash Killer II"
阅读全文
摘要:传送门 "洛谷" Solution 考虑要求的是什么,前缀的本质不同的字符串个数? 如果只要求一个串那么显然答案是$\sum_{i=1}^{tot}len[i] len[fa[i]]$(实际上这个并不显然,~~想一想为什么~~) 接着就是在线的啦,你可别忘了SAM本身就是在线算法,每一次算一个贡献就
阅读全文
摘要:传送门 "BZOJ" Solution 只是为了学习一下线段树分治的啦! 当你学会线段树分治之后,可以跳过下面的一部分: 1. 按照时间搞一颗线段树出来,把包含这段区间的操作用vector压进去。 2. 每一个线段树的节点代表一段时间(没问题吧) 3. 到了某一个节点,把这个节点上面的所有操作做好,
阅读全文
摘要:传送门 "BZOJ" "洛谷" Solution 考虑我们每找到一个回文串就更新一次答案,跑个SAM,这样子复杂度是爆炸的。 接下来的就是优化: 我们可以倍增跳直到跳不了,最后的siz就是出现次数。 没了?没了! 代码实现 "代码戳这里"
阅读全文
摘要:传送门 "BZOJ" "洛谷" Solution "SA版本的" 考虑可以建一个SAM? 那么接下来我们就考虑每一对点对之间的贡献了。 把这个式子化简一下就是无序点对之间的那啥(自己意会一下) 然后我们定义边权为len的差值。 然后那个东西不就是$i j$的路径吗? 然后就可以分开考虑每一条边的贡献
阅读全文
摘要:传送门 "BZOJCH" "洛谷" Solution 这个东西要求的不就是最小表示法吗? 把原串复制一遍然后都加到后缀自动机里面去。 用个map跑一下,这样子可以保证每一次选的是最小字典序的。 然后跑$n$次就可以了。 小插曲 对面的神仙 "hyjhyj" 问我这个东西如果长度不够怎么办。 emmm
阅读全文
摘要:传送门 "BZOJ" 前言 ~~听说~~最近要省选,那么我就写一下吧。QwQ! 1000 过于简单,不写了。 1001 不会对偶图,直接优化最小割 "题解" 1002 高精度套公式计算 "题解 (Code by heyujun)"
阅读全文
摘要:传送门 "BZOJ" 然而是权限题 "洛谷" Solution 发现题目给出的一些规律,emm,如果我们新凑出来的一个数,那么后面一个数一定是$sum+1$。 于是就可以主席树随便维护了! 代码实现 cpp include using namespace std; inline int gi(){i
阅读全文
摘要:传送门 "BZOJ" Solution 考虑如果可以回血肯定要打,那么就是按照伤害值从小到大排个序能打就打,不能打就$NIE$。 接着看不能够回血的,emmm,把这个过程反着看一下就是打一个怪扣$a_I$的血,加$d_i$的血。 咦?怎么和上面那一个一样啊?然后就可以解决了! 代码实现 cpp in
阅读全文
摘要:题面 "传送门" Solution 看到什么最大值最小肯定二分啊。 check直接跑一个二分图匹配就好了。 orz ztl!!! 代码实现
阅读全文
摘要:传送门 "洛谷" Solution 这是一道神仙题! 考虑这个东西是个啥。 emmm,如果两个点要到达,一定不能经过比他们大的。 所以Floyd搞定两点距离然后费用流跑一遍就是答案了! 代码实现 cpp / mail: mleautomaton@foxmail.com author: MLEAuto
阅读全文
摘要:传送门 "洛谷" Solution 考虑和happiness一个套路,新建一个点然后连边就好了。 代码实现
阅读全文
摘要:传送门 "洛谷" Solution 直接跑最小割板子就好了。 代码实现 cpp include include include include include include include include include using namespace std; define ll long lo
阅读全文
摘要:传送门 "洛谷" Solution 比较巧妙啊! 考虑这个只有同意和不统一两种,所以直接令$s$表示选,$t$表示不选,然后在朋友直接建双向边就好了。 代码实现 cpp include using namespace std; const int N=500010,Inf=1e9+10; int f
阅读全文
摘要:传送门 "洛谷" Solution 考虑把每一个修车工人拆成$n$个点,那么考虑令$id(i,j)$为第$i$个工人倒数第$j$次修车。 然后就可以直接跑费用流了!!! 代码实现 cpp / mail: mleautomaton@foxmail.com author: MLEAutoMaton Th
阅读全文
摘要:大家可以先看这道题目再做! "SCOI2007修车" 传送门 "洛谷" Solution 就和上面那道题目一样的套路,但是发现你会获得60~80分的好成绩!!! 考虑优化,因为是SPFA,所以每一次只会走最短路,做完之后发现。。。 欸,好像每一次会搞掉一条边,那么我们动态加入点就好了。 代码实现 c
阅读全文