02 2019 档案
摘要:树链剖分是基于重孩子将树划分成若干条链,配上对应的数据结构(例如这里的线段树)就可以维护树中的链,甚至可以直接维护子树。 貌似还有更高级的$\text{LCT}$,要搭配$\text{Splay}$。正在学习中。 具体证明。。待更。。 源码如下。
阅读全文
摘要:化成数学代数式就是这样: $$\sum_{x=a}^b\sum_{y=c}^d[\gcd(x,y)=k]$$ 根据差分的思想,可以将该式变成: $$\sum_{x=1}^b\sum_{y=1}^d[\gcd(x,y)=k]-\sum_{x=1}^{a-1}\sum_{y=1}^d[\gcd(x,y)
阅读全文
摘要:这道题是数论题,所以需要一些变形。 考虑求所有$\gcd$的和,我们采用分组求解,也就是根据$i$和$N$的$\gcd$的值进行分组。 $$\begin{array}{ll}&\sum\limits_{i=1}^N\gcd(i,N) \\ = &\sum\limits_{d|n}d\sum\limi
阅读全文
摘要:题目传送门 这道题是一道莫队题。对于每一种问法,就是查询对应的数是否在当前的区间内。 设$b[i]$表示莫队当前区间中有没有$i$这个数。 对于第一问“是否可以选出两个数它们的差为x”,也就是判断当$i-j=x$时是否存在$b[i],b[j]=1$。变形一下发现$i=j+x$,就成了$b[j],b[
阅读全文
摘要:题目传送门 不用管它随机什么的,就用贪心的思想去想, 会发现这道题的实质是:求查询区间众数出现次数。 莫队即可解决。 注意字符集1e9,要离散化处理。
阅读全文
摘要:题目传送门 这道题的解法是莫队。莫队是一个离线的算法(也可以在线),能满足$O(1)$转移的算法。通过分块来获得适当的求解顺序使得复杂度控制在$O(n\sqrt{n})$。
阅读全文
摘要:对于$l_i$、$r_i$的范围太大,我们离散化一下就可以缩到百万的范围了。 这道题要求花费最小。所以根据区间的长度排序,就可以转化成单调性的问题了:选取一段区间,使得这些区间的覆盖存在一个点被覆盖$\geq M$次。 于是维护一颗线段树,然后维护选取区间的开头和结尾,加入区间时将线段树对应的区间修
阅读全文
摘要:这道题要明白摩尔投票法,详见[洛谷P2397]yyy loves Maths VI (mode)。 还有一个就是可加性。 所以我们可以用线段树维护区间过半数。 但是不一定就过了半,所以再往平衡树里面查下。 平衡树要开很多棵,对应的平衡树中存放对应数的位置。 然后查询某个数在区间$[l,r]$中出现次
阅读全文
摘要:这道题几个重要信息: 1、依次放入编号为1,2,3,...的球。 2、任何2个相邻球的编号之和为完全平方数。 这两点就可以确定网络流构图,一定是$DAG$图。 难点在于放入到底多少个球呢? 网络流算法比较强大的是可以在残余网络中继续求解。 所以我们从小往大的球放,同时建立与其他点的连接。 直到最小路
阅读全文
摘要:这道题是一个很裸的费用流题目。 一般点之过一次的套路就是拆点连边。 其他的模拟下就水过去了。
阅读全文
摘要:题目传送门 还记得原版方格取数怎么做的吧?$DP$。 当时的复杂度为$O(n^4)$。 但现在$k \leq 10$,所以原办法行不通。 这道题发现一个数只能被取一次。 然后就是找$k$条从$(1,1)$到$(n,n)$的路径使得覆盖的数值和最大。 这个可以用网络流的相关知识求解(准确说是最小费用最
阅读全文
摘要:洛谷的提示给的很清楚了:设 $V=\{1,2,...,n\}$ ,构造网络 $G_1=\{V_1,E_1\}$ 如下: $$V_1=\{x_0,x_1,...,x_n\}\cup\{y_0,y_1,...,y_n\}$$ $$E_1=\{(x_0,x_i):i\in V\}\cup\{(y_i,y_
阅读全文
摘要:第一问$LIS$求出$s$。(用正常的$O(n^2)$的算法,后面有用) 第二问首先动态规划求出$f_i$,然后根据题意 “最多可取出多少个长度为s的不下降子序列”说明子序列的起点一定在$i$当且仅当$f_i=s$,终点在$j$当且仅当$f_j=1$。 又因为这是网络流24题每个数只能被选一次, 所
阅读全文
摘要:注意观察题目:$Pi>Pi/2$。 发现特别像什么? 二叉堆! 于是就变成了:$n$个堆元素进行排列,满足堆性质的排列对$p$的取模。(堆性质根据题意为大根堆) 设$f_i$为当前堆首为$i$的堆的排列方案数。为满足堆性质$P_i$显然只能取剩下若干数的最大值。 发现$f_i$影响$f_{2i}$和
阅读全文
摘要:题目传送门 这道题题面十分简单,貌似不难,但空间一限制就比较麻烦了。 其实了解了一些比较重要的东西就很简单了。 先不切入重点。 方法一 如果一个数过半,如果将这个数转成二进制的形式,则该数对应的每位上的数(不是$0$就是$1$)一定过半(指其他数的对应数位$0$或$1$的统计)。 举个例子:有一串数
阅读全文
摘要:$Treap$实现 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define re register 6 #define rep(i, a, b) for (re int i = a; i <= b; ++i) 7 #define
阅读全文
摘要:读懂题意后发现这道题最主要是要求出字典序最小的排列,考察了匈牙利算法的实质。 首先对于$D_i$的定义,我们可以解出可能的$T_i$,然后将$i$与$T_i$连边,求最大匹配。 如果最大匹配$<N$则说明$"No\ Answer"$。 但是要求字典序最小。 第一中方法在我$AC$后翻看题解而写的。
阅读全文
摘要:这道题题意清晰明了。 最好的方法用前缀差求,即$[0,B]-[0,A-1]$。 首先拆位把每位存到数组中,并求出位数$L$。 然后把这些数当成$L$位进行统计,不足$L$位的先补前缀$0$。 最后减去多余的前缀$0$即可。 下面求$[0,A]$各个数出现次数的方法大体是: 例如$[0,1320]$:
阅读全文
摘要:这道题是一个不错的题,难点就在于建模。 交换操作过程中,同一行的黑块是不会被拆开,同理纵块也是。 接着目标状态就是一条对角线上全都是黑块。 我们倒过来想,看看能否从目标状态变成初始状态。 对于所有的黑块$(x,y)$(左边行右边列,点分行列),我们连条边$x \leftarrow \rightarr
阅读全文
摘要:先放$Dinic$。 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define re register 6 #define rep(i, a, b) for (re int i = a; i <= b; ++i) 7 #defin
阅读全文
摘要:这道题要用到“尺取法”(又名“滑动窗口算法”),具体的描述可参考P2716 【和谐的雪花】——AC-Evil的洛谷博客 这道题跟上面的这题几乎一样。
阅读全文
摘要:这道题很容易看出是一道单调队列题。 首先我们根据珠子的位置排序。 然后按顺序枚举一个个珠子。 如果该种珠子没有出现过标记上它的位置,如果出现过修改并打上当前位置。当所有珠子都出现后,将当前位置减去打标记位置最小的一个即为当前解。 可以证明正确性。 显然选择珠子越靠后越好。 最小位置的查找要$O(K)
阅读全文
摘要:这道题是一个状压动归题。子集生成,每一位表示是否选择了第$i$个数。 转移:$f[S] = \sum f[S-\{x\}]$且$x\in S$,当该子集所有元素的和为$b_1$或$b_2$时不转移。 初始化:$f[\{\}]=1$,其他为$0$。 目标:$f[全集]$。 注意常数即可。
阅读全文
摘要:题目传送门 分析: 这道题是跟$Tarjan$有关的一题。 如果某一个点双连通分量中没有割顶,则这个点双的答案为$2$。因为塌了任何一个点,其他任意两点仍然连通。防止塌的点就是救援口,所以要设置$2$个。 如果某一个点双连通分量中有一个割顶,说明至少有两个点双公用这一个割顶。所以必须保证每个点双中除
阅读全文
摘要:这应该是$NOI2014$最简单的一题。 首先这题有$AND$、$OR$、$XOR$三个运算,跟二进制有关。 我们逐位看。 忽略$\leq m$的限制,在开始时每一位都可以是$0$或$1$,而不同的选择到最后的结果互不影响,所以共有四种组合。 想让结果更大,也就是想让结果尽可能多变成$1$。 加上$
阅读全文
摘要:题目传送门 一道分块的好题。 这题分块后,对于两种操作: ·让区间[l,r]+=w; ·查询区间[l,r]>=c的数的个数 分块后,我们将每一块中的数排序,这样每一块中的查询可以通过二分完成。 对于区间的修改,如果覆盖了整块,通过标签的修改满足题意;如果只是块中的一部分,暴力修改原数组再重新排序维护
阅读全文
摘要:题目传送门 题意:给定一张无向图,求每个点被封锁之后有多少个有序点对$(x,y)(x!=y,1<=x,y<=n)$满足$x$无法到达$y$。 题目强调了所有村庄都相互可达。 首先会想到割顶,因为如果删去割顶,就会导致图的连通块增加。反之不变。 不是割顶答案就应该是$(n-1)*2$。因为连通块没有增
阅读全文

浙公网安备 33010602011771号