摘要: Day -n ccf居然咕了这么久才发账号QAQ Day 1 开题,t1:好像只会$O(nt^2)$,t2:懵逼,t3:懵逼。 那我岂不要爆炸 先做t1。打完暴力发现这个东西好像可以离散化?一算复杂度好像是$O(mt)$,赶紧码码码,最后弄出了个$vector$套$vector$配合$dijkstr 阅读全文
posted @ 2019-07-28 16:02 wangyuchen 阅读(266) 评论(0) 推荐(0) 编辑
摘要: 首先直接跑拓扑排序,编号小的排前面是错误的,这组数据就可以hack掉: 4 2 3 1 2 4 答案:3 1 2 4 错误输出:2 3 1 4 其实,反过来,编号大的排后面就是对的了。 为什么呢?反证法:考虑输出序列与答案序列不同的编号最小的数,记它的位置为$p$,答案$p'$,由题意可知$p>p' 阅读全文
posted @ 2019-07-28 15:28 wangyuchen 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 首先要知道$kruskal$重构树:在跑$kruskal$的过程中,把选出来的边建虚点,和两个联通块的根相连,很明显最后得到一个二叉堆。 在这个二叉堆上倍增出最远能跑多高,在这个子树里求出最小的$d_u$即可 #include<cstdio> #include<cstring> #include<a 阅读全文
posted @ 2019-07-28 14:35 wangyuchen 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 对于不用配对的$k-l$个元素,很明显选最大的是最优的。 然后重复$l$次凑对:如果当前还有不用配对的可以选(某一次凑了两个,或者一开始就有对出现),那么选没选的里面的最大值;否则要么选一个没选的和已选的凑对,再在另一个序列里再选一个,要么选都每选过的一对,这个可以用堆来做。 #include<cs 阅读全文
posted @ 2019-07-28 14:29 wangyuchen 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 这题主要问题在于卡空间,树套树和kD树都被卡 于是考虑只存点不建边,那么放入优先队列中排序的就是矩形而非点,同时用线段树套set把空间卡到$O(nlogn)$就可以AC了。 #include<cstdio> #include<cstring> #include<vector> #include<qu 阅读全文
posted @ 2019-07-28 14:23 wangyuchen 阅读(204) 评论(0) 推荐(0) 编辑
摘要: 模板:后缀数组毒瘤 看见题面上的“后缀”、“$lcp$”等字样,dalao们大概马上想到后缀数组了。但是这道题能不能不用后缀数组呢?(其实是我不会后缀数组) 不难想到,$lcp\ge k$意味着两个字符串的前$k$个字符是相同的,于是大力字符串哈希,用$$(a_{1}x^{k-1}+a_{2}x^{ 阅读全文
posted @ 2019-07-28 14:15 wangyuchen 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 分块是个好算法 尤其对于我这种不会树套树的傻子 删除一个数时,不难发现它对于逆序对的贡献是它前面比它大的数的个数+它后面比它小的数的个数,于是用分块就非常容易了: 1. 算贡献,该数前面的块和后面的块二分,它所在的块暴力;2. 把它删除,原数列打标记,块内删除后把后面的数往前移。 这样写的复杂度是$ 阅读全文
posted @ 2019-07-28 14:12 wangyuchen 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 来一发$Splay$~~~ 首先一个个操作分析: 1. I操作,$Splay$插入。2. D操作,$Splay$删除。3. R操作,可以参考洛谷P3391,把$[x,y]$从树中分裂出来,打标记4. P操作,在建树时把$1-n$号字符所在的结点编号记下来,判断该点是否被删除(在删除时加个记号),如果 阅读全文
posted @ 2019-07-28 14:09 wangyuchen 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 首先,不难看出$k$次修改后的树有$2^k$棵,所以暴力无疑只有20pts那不就是我吗 所以,我们要把$2^{k}$棵树的维护变成一棵树。记$P_o$为$o$在这些树有标记的概率,那么答案就是$\sum{P_o}*2^{k}$。但由于有$pushdown$,一个结点在被访问到时,只要它和它的祖先中有 阅读全文
posted @ 2019-07-28 14:06 wangyuchen 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 对于每个结点$u$,考虑维护它能到达的结点(不包括$u$本身)集合$S_u$,那么答案就是$\frac{\sum\limits^n_{i=1}{|S_u|}}{2}$。 然后考虑这个$S_u$怎么搞。暴力 先大力树剖一遍,那么$(u,v)$的路径就变成了不超过$log_2n$个区间,如果把每一个结点 阅读全文
posted @ 2019-07-28 14:03 wangyuchen 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 只会$O(mt)$ 首先这个题有点,有时间,便套路地想到拆点 (或许我网络流做多了),设最大时间为$t$,那么把每个点拆成$t$个,连上原图的边和等待即可。 恭喜拿到$70pts$ 在这个思(bao)路(li)的基础上,我们发现,每个点拆成$t$个是毫无意义的,只要保留所有进出的时间点就可以了,于是 阅读全文
posted @ 2019-07-28 13:57 wangyuchen 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 考虑点分治,对于一个子树,求出每个点到根的距离并排序,用双指针扫描,但这样会把来自同一个儿子的路径也统计上去,再对每个儿子做一遍,减去即可。 #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using na 阅读全文
posted @ 2019-07-28 13:53 wangyuchen 阅读(138) 评论(0) 推荐(0) 编辑