11 2018 档案

摘要:题目大意:给你一个$n\times m$的方格,要求你从中选择一些数,其中没有相邻两个数,使得最后和最大 题解:网络流,最小割,发现相邻的两个点不可以同时选择,进行黑白染色,原点向黑点连一条容量为点权的边,白点向汇点连一条容量为点权的边,黑点向周围一圈的白点连容量为$inf$的边,总权值减去跑出来的 阅读全文
posted @ 2018-11-29 20:39 Memory_of_winter 阅读(192) 评论(0) 推荐(0)
摘要:题目大意:给你$n$个数,有两个操作: 题解:多人尝试得,现在这道题线段树套线段树过不去,所以我学习了一下树状数组套线段树,线段树只维护值域上的区间和,把树状数组询问部分变成这么多棵线段树相减,这样就可以在线段树上二分了 卡点:无 C++ Code: 阅读全文
posted @ 2018-11-29 15:00 Memory_of_winter 阅读(128) 评论(0) 推荐(0)
摘要:题目大意:给你一张有向图,每个点最多一条出边,问从每个开始,走多少步会到一个已经过的点 题解:$tarjan$缩点,然后建反图$DP$ 卡点:无 C++ Code: 阅读全文
posted @ 2018-11-28 09:41 Memory_of_winter 阅读(198) 评论(0) 推荐(0)
摘要:题目大意:问长度为$n$的$Sam$数有几个,$Sam$数的定义为没有前导零,相邻两个数字之差绝对值小于等于$2$的数 题解:发现转移方程一定,可以矩阵快速幂。 卡点:没有特判$n=1$的情况 C++ Code: 阅读全文
posted @ 2018-11-28 08:35 Memory_of_winter 阅读(215) 评论(0) 推荐(0)
摘要:题目大意:有一棵$n$个点的树,和一个费用$m$,每个点有一个费用和价值,请选一个点,再从它的子树中选取若干个点,使得那个点的价值乘上选的点的个数最大,要求选的点费用总和小于等于$m$ 题解:树形$dp$,贪心可得选的点一定是费用最少的几个点,可以用可并堆,大根堆,若总费用大于$m$就把堆顶弹掉,直 阅读全文
posted @ 2018-11-27 19:07 Memory_of_winter 阅读(156) 评论(0) 推荐(0)
摘要:题目大意:有一棵$n$个点的树,第$i$个点权值为$w_i$,有两种操作: 题解:树剖,然后就可以把树上问题转化为序列上的问题,可持久化$Trie$即可 卡点:树剖判断条件错 C++ Code: 阅读全文
posted @ 2018-11-27 15:57 Memory_of_winter 阅读(157) 评论(0) 推荐(0)
摘要:题目大意:求树上最长的异或路径 题解:由于异或具有自反性,只需要求出每个节点到根的异或长度,塞进$Trie$里,最后对每个节点找一下最大值更新答案即可 卡点:把动态开点写成了可持久化,然后空间要再多开一点(比层数多一) C++ Code: 阅读全文
posted @ 2018-11-27 10:30 Memory_of_winter 阅读(149) 评论(0) 推荐(0)
摘要:题目大意:有一串初始长度为$n$的序列$a$,有两种操作: 题解:把序列前缀和,变成$S$,就变成了在$[l-2,r-1]$区间内找一个数$S_p$,使得$S_p\oplus S_n\oplus x$最大。可持久化$trie$ 卡点:无 C++ Code: 阅读全文
posted @ 2018-11-27 09:53 Memory_of_winter 阅读(177) 评论(0) 推荐(0)
摘要:题目大意:有$5$种操作: 题解:树套树,权值线段树套平衡树 卡点:$TLE$卡了一会(我好菜啊) C++ Code: 阅读全文
posted @ 2018-11-26 19:20 Memory_of_winter 阅读(252) 评论(0) 推荐(0)
摘要:题目大意:给你$n$个点,每个点有权值$k$,现有两种操作: 1. $B\;x\;y:$将$x,y$所在联通块合并2. $Q\;x\;k:$查询第$x$个点所在联通块权值第$k$小是哪个数 题解:线段树合并,权值线段树上二分即可 卡点:无 C++ Code: 阅读全文
posted @ 2018-11-26 09:21 Memory_of_winter 阅读(173) 评论(0) 推荐(0)
摘要:题目大意:给你一棵树,有两个操作: 题解:树剖,可以维护区间或,然后若一段区间为$0$则跳过,否则在线段树上二分 卡点:二分部分多大了一个$=$,然后$MLE$ C++ Code: 阅读全文
posted @ 2018-11-25 17:22 Memory_of_winter 阅读(129) 评论(0) 推荐(0)
摘要:题目大意:给一张无向图,找一条字典序最小的欧拉路径 题解:若图不连通或有两个以上的奇数点,则没有欧拉路径,可以$dfs$,在回溯时把这个节点加入答案 卡点:没有在回溯时加入答案,导致出现了欧拉路径没走环(少走了一段) C++ Code: 阅读全文
posted @ 2018-11-25 10:04 Memory_of_winter 阅读(137) 评论(0) 推荐(0)
摘要:题目大意:一张无向图,问最少设置几个关键点使得有点被覆盖(一个关键点可以覆盖所有与它相连的点),关键点不可以相邻 题解:二分图染色,若不冲突则为较少的一种颜色数 卡点:无 C++ Code: 阅读全文
posted @ 2018-11-24 22:47 Memory_of_winter 阅读(136) 评论(0) 推荐(0)
摘要:题目大意:给一棵树,求其中最大的“毛毛虫”,毛毛虫的定义是一条链上分出几条边 题解:把每个点的权值定义为它的度数减一,跑带权直径即可,最后答案加二 卡点:无 C++ Code: 阅读全文
posted @ 2018-11-23 21:47 Memory_of_winter 阅读(201) 评论(0) 推荐(0)
摘要:题目大意:给定一棵树。有三种操作: 题解:可以发现一条路径对所有不在这条路径上的点有贡献,所以可以把这些区间给排除(树链剖分中的每一条链存下来),把其他位置加上一个数,可以给每个点维护一个大根堆。 考虑删除一个数,可以再开一个大根堆,表示删除的数,若两个堆顶元素相同,就弹出。 卡点:无 C++ Co 阅读全文
posted @ 2018-11-23 20:23 Memory_of_winter 阅读(218) 评论(0) 推荐(0)
摘要:题目大意:给一棵树,路径加,子树求和 题解:树剖 卡点:无 C++ Code: 阅读全文
posted @ 2018-11-22 11:29 Memory_of_winter 阅读(130) 评论(0) 推荐(0)
摘要:题目大意:给你一棵树,有$3$个操作: 题解:可以在割断时把这条边赋值上$1$,恢复时赋成$0$,只需要求$p->q$路径和是否为$0$即可,可以用$dfs$序+树状数组维护 卡点:$LCA$越界 C++ Code: 阅读全文
posted @ 2018-11-21 20:03 Memory_of_winter 阅读(169) 评论(0) 推荐(0)
摘要:题目大意:给定一棵以$1$为根的树,$m$次操作,第$i$次为对以$v_i$为根的深度小于等于$d_i$的子树的所有节点权值加$x_i$。最后输出每个节点的值 题解:可以把操作离线,每次开始遍历到一个节点,把以它为根的操作加上,结束时把这个点的操作删去。 因为是$dfs$,所以一个点对同一深度的贡献 阅读全文
posted @ 2018-11-21 15:31 Memory_of_winter 阅读(128) 评论(0) 推荐(0)
摘要:题目大意:一个序列是好的当且仅当有一个数是其它所有数的和,问一个序列可以删掉哪个数变成好的序列。输出所有方案。 题解:发现等于其他数的和的那个数一定是其中最大的,只要排序一下(其实只要找到最大的两个数),就可以$O(1)$判断是否合法 卡点:无 C++ Code: 阅读全文
posted @ 2018-11-19 19:27 Memory_of_winter 阅读(320) 评论(0) 推荐(0)
摘要:题目大意:给一个长度为$n(1\leqslant n\leqslant24)$的序列$S$和$k(0\leqslant k\leqslant2)$个数。 求有多少种$S$的排列方式使得其任何一个前缀和都不是$k$个数里的任意一个。 题解:状压$DP$,枚举当前选的数的状态和下一个数,卡常,枚举下一个 阅读全文
posted @ 2018-11-18 19:56 Memory_of_winter 阅读(271) 评论(0) 推荐(0)
摘要:题目大意:有$n$个数,$q$次询问,每次询问$[l,r]$中最多可以选多少个数使得相同的数最多有$k$个。($k$在同个测试点中相同) 题解:$k$不变,可以预处理出每个数前面的第$k$个相同的数在哪,对于询问区间$[l,r]$,若前面的第$k$个数的位置小于$l$,则可以选择这个数。于是用主席树 阅读全文
posted @ 2018-11-18 18:35 Memory_of_winter 阅读(233) 评论(0) 推荐(0)
摘要:题目大意:一个全排列,两种操作: 1. $0\;l\;r:$把$[l,r]$升序排序2. $1\;l\;r:$把$[l,r]$降序排序 最后询问第$k$位是什么 题解:二分答案,把比这个数大的赋成$1$,否则为$0$,线段树区间和和区间赋$01$,最后判断第$k$位是$0$是$1$,若为$1$则还可 阅读全文
posted @ 2018-11-18 15:13 Memory_of_winter 阅读(130) 评论(0) 推荐(0)
摘要:题目大意:$NOIP2018\;TG\;D2T2$ 题解:在skip2004的博客基础上修改的,也是暴搜。 说明一下把vector改成数组并不可以通过此题,记录。 结论:在$m>n+1$时答案为$3(n,m)$($(n,m)$表示长$m$高$n$的矩形的答案) 发现其中判断右下角矩阵斜线全相等的部分 阅读全文
posted @ 2018-11-18 13:20 Memory_of_winter 阅读(446) 评论(1) 推荐(1)
摘要:题目大意:$NOIP\;TG\;D2T1$ 题解:一棵树的很简单,第一个点一定是$1$,只需要对每个节点,找最小的没有访问过的节点访问即可,我写的是$O(n\log_2n)$。 考虑基环树的部分,一个显然的想法是枚举一条环上的边,然后删掉,跑树的部分,复杂度为$O(mn\log_2n)$,明显过不了 阅读全文
posted @ 2018-11-17 16:09 Memory_of_winter 阅读(244) 评论(0) 推荐(0)
摘要:题目大意:$NOIP2018\;TG\;D1T3$ 题解:题目要求最短的赛道的长度最大,可以想达到二分答案,接着就是一个显然的树形$DP$。 发现对于一个点,它子树中若有两条链接起来比要求的答案大,一定接起来成为一条路径,因为接起来答案一定加一,而传递上去的话不一定。然后对于一条链,一定是找可行的最 阅读全文
posted @ 2018-11-17 15:30 Memory_of_winter 阅读(261) 评论(0) 推荐(0)
摘要:题目大意:最短路,可以有$k$条边无费用 题解:分层图最短路,建成$k$层,层与层之间的边费用为$0$ 卡点:空间计算出错,建边写错 C++ Code: 阅读全文
posted @ 2018-11-08 20:21 Memory_of_winter 阅读(181) 评论(0) 推荐(0)
摘要:题目大意:有一棵树,从中选取$2$条链,其中任何一条链的端点不能被另一条链包含,求这两条链,使这两条链的公共的点的部分最长,若相同,使得总长度最长。 题解:树形$DP$,因为端点互不包含,所以公共的部分的端点一定有两个及以上的儿子,然后可以把这样的点先全部求出来。求新树的直径就可以满足第一个要求(洛 阅读全文
posted @ 2018-11-08 16:19 Memory_of_winter 阅读(359) 评论(0) 推荐(0)
摘要:题目大意:给一张$n(n\leqslant2000)$个点的无向图,给所有边定向,使定向之后存在最多的有序点对$(a,b)$满足从$a$能到$b$ 题解:先把边双缩点,因为这里面的点一定两两可达。 根据网上题解得知,最优解一定长这样:存在一个点$s$,使得对于任意其他点$t$,要么$s$可以到$t$ 阅读全文
posted @ 2018-11-08 14:00 Memory_of_winter 阅读(340) 评论(0) 推荐(0)
摘要:题目大意:给你一个长度为$n$的$01$串,一次操作定义为:选取$3$个等距的元素,使其$0$变$1$,$1$变$0$,要求在$\Big\lfloor \dfrac n 3\Big\rfloor+12$次操作内变为全$0$。输出是否可行以及方案 题解:skip1978的博客讲的十分详细。发现给的操作 阅读全文
posted @ 2018-11-07 20:10 Memory_of_winter 阅读(423) 评论(0) 推荐(0)
摘要:题目大意:最大全一子矩阵 题解:单调栈 卡点:果然我还是不会单调栈,长宽写错 C++ Code: 阅读全文
posted @ 2018-11-07 18:29 Memory_of_winter 阅读(141) 评论(0) 推荐(0)
摘要:题目大意:给一个数列,每次询问一个区间内有没有一个数出现次数超过一半。有,输出这个数,否则输出$0$ 题解:主席树,查询区间第$\bigg\lfloor\dfrac{len+1}{2}\bigg\rfloor$大,并判断它出现次数是否大于$\Big\lfloor\dfrac{len}{2}\Big\ 阅读全文
posted @ 2018-11-07 16:22 Memory_of_winter 阅读(134) 评论(0) 推荐(0)
摘要:题目大意:$NOIPD2T2$宝藏 题解:正常做法:状压DP 。这次模拟退火,随机一个排列,$O(n^2)$贪心按排列的顺序加入生成树 卡点:没开$long\;long$,接受较劣解时判断打错,没判$n=1​$的情况 C++ Code: #include <cstdio> #include <cma 阅读全文
posted @ 2018-11-07 15:33 Memory_of_winter 阅读(318) 评论(0) 推荐(0)
摘要:题目大意:有$n$个重物,每个重物系在一条绳子上。所有绳子系在一起,问绳结最终平衡于何处。 题解:$NOIP$前学学模拟退火,但发现我脸好黑啊。。。 卡点:脸黑 C++ Code: 阅读全文
posted @ 2018-11-07 07:51 Memory_of_winter 阅读(215) 评论(0) 推荐(0)
摘要:题目大意:维护两个栈,几个操作: 题解:可以平衡树搞,但是也可以用双向链表。两个双向链表,除了第$6$个,其他都是基本操作。第$6$个操作时,就把$y$的栈顶与$x$的栈顶接起来,把$x$的栈顶设为$y$的栈底就行了 卡点:莫名$RE$了很多次(包括后面$WA$的),开大数组后通过(我也不知道为什么 阅读全文
posted @ 2018-11-06 16:46 Memory_of_winter 阅读(222) 评论(0) 推荐(0)
摘要:题目大意:给定$K,L,R$,求$[L,R]$之间最多不包含超过$K$种数字的数的和。 题解:数位$DP$,令$f_{i,j}$为选到第$i$个数,已经用了的数字状态为$j$,令$nxt$为当前条件的后面的数,$f_{i,j}=\sum\limits_{nxt}(d\times10^i+nxt)(d 阅读全文
posted @ 2018-11-05 19:23 Memory_of_winter 阅读(372) 评论(1) 推荐(0)
摘要:题目大意:维护一个数列,要求在左边插入一个数,在右边插入一个数,查询一个数的排名 题解:可以双指针,开个数组存每个数的位置 卡点:无 C++ Code: 阅读全文
posted @ 2018-11-05 15:11 Memory_of_winter 阅读(135) 评论(0) 推荐(0)
摘要:题目大意:$n$列箱子,横向消除,一次可以把一行及以上的所有箱子消除,但是一次最多只可以消除$k$个,求最少用几次把箱子的高度变成一样 题解:贪心,求出比一个高度高的有几个箱子,消除即可 卡点:代码改了一次,结尾处理部分忘记改了 C++ Code: 阅读全文
posted @ 2018-11-05 14:40 Memory_of_winter 阅读(276) 评论(0) 推荐(0)
摘要:题目大意:给你一张无向图,求出删去每个点后有多少个有序点对无法互相到达 题解:缩点,然后找割点$DP$,非割点的答案为$2n-2$(有序点对),割点的答案为它各个子联通块大小之积加上$2n-2$ 卡点:无 C++ Code: 阅读全文
posted @ 2018-11-05 13:11 Memory_of_winter 阅读(129) 评论(0) 推荐(0)
摘要:题目大意:一串数字,使用如下方式排序: 先找到最小的数的位置$P_1$,将区间$[1,P_1]$反转,再找到第二小的数的位置$P_2$,将区间$[2,P_2]$反转,知道排序完成。输出每次操作的$P_i$,要求稳定排序(在括号外的是多组数据,括号内的是单组数据,四倍经验) 题解:可以用平衡数维护序列 阅读全文
posted @ 2018-11-04 21:13 Memory_of_winter 阅读(276) 评论(0) 推荐(0)
摘要:题目大意:给一个有$n(n\leqslant16)$个单词的字典,求单词接龙的最大长度 题解:发现$n$很小,可以状压,令$f_{i,j}$表示选的数的状态为$i$,最后一个字母是$j$的最大长度。 卡点:无 C++ Code: 阅读全文
posted @ 2018-11-04 15:56 Memory_of_winter 阅读(257) 评论(0) 推荐(0)
摘要:题目大意:有$n(n\leqslant10^6)$个数,$5$种操作: 题解:堆,没有插入,可以离线倒着搞,把删除变成插入即可 题解:卡$map$ C++ Code: 阅读全文
posted @ 2018-11-04 14:50 Memory_of_winter 阅读(359) 评论(0) 推荐(0)
摘要:题目大意:有$n(n\leqslant5\times10^5)$个数,有$m(m\leqslant5\times10^5)$次询问。 一次询问形如$l\;r\;s\;k\;w_1\;w_2\dots w_k:$每次询问$[l_i,r_i]$内的出现次数大于一半的数,如果没有,则为$s$。这次询问后结 阅读全文
posted @ 2018-11-03 12:52 Memory_of_winter 阅读(261) 评论(0) 推荐(0)
摘要:题目大意:有$n(n\leqslant2\times10^6)$个数,找众数,保证众数出现次数超过一半(内存必须是$O(1)$) 题解:摩尔投票法。因为众数出现次数超过一半,所以这个众数必然会只有$1$个。 每一轮投票时,从数组中找出一对不同的元素,将它们删除。如果数组为空,则此时没有任何元素出现的 阅读全文
posted @ 2018-11-02 19:40 Memory_of_winter 阅读(192) 评论(0) 推荐(0)
摘要:题目大意:给你一棵树,每个点有点权,边有边权,求一个点,使得其他所有点到这个点的距离和最短,输出这个距离 题解:树形$DP$,思路清晰,转移显然 卡点:无 C++ Code: 阅读全文
posted @ 2018-11-02 18:33 Memory_of_winter 阅读(191) 评论(0) 推荐(0)
摘要:题目大意:给一棵$n(n\leqslant2\times10^5)$个叶子的二叉树,可以交换每个点的左右子树,要求前序遍历叶子的逆序对最少。输出最少的逆序对个数 题解:线段树合并,对于每个节点求出交换左右子树和不交换的答案。 卡点:没开$long\;long$ C++ Code: 阅读全文
posted @ 2018-11-02 18:05 Memory_of_winter 阅读(164) 评论(0) 推荐(0)
摘要:题目大意:有一种长度为$n(n\leqslant 10^{18})$的字符串,给定$m(m\leqslant10^3)$种限制,即字符$c$出现的次数为$cnt$,若一个字符有多种限制,则满足任意一个即可,求这种字符串有多少个,所有的$cnt$相乘小于等于 123,答案对 12345 取模。 题解: 阅读全文
posted @ 2018-11-02 12:32 Memory_of_winter 阅读(258) 评论(0) 推荐(0)
摘要:题目大意:求区间$[l,r]$中数字$0\sim9$出现个数 题解:数位$DP$ 卡点:无 C++ Code: 阅读全文
posted @ 2018-11-01 12:17 Memory_of_winter 阅读(219) 评论(0) 推荐(0)