随笔分类 - 网站->LOJ
摘要:题解 具体就是列一个未知数方程$dp[i]$表示有$i$滴血的时候期望多少轮 $dp[i] = 1 + \sum_{j = 1}^{i + 1} a_{i,j}dp[j]$ $dp[n] = 1 + \sum_{j = 1}^{n} a_{i,j}dp[j]$ $a_{i,j}$表示从$i$滴血到$
        阅读全文
                
摘要:题解 dp[i][j][0/1][0/1]表示以$i$为根的子树,用了$j$个,i点选了或者没选,i点被覆盖或没被覆盖 转移比较显然,但是复杂度感觉不太对? 其实转移到100个的时候就使第二维满了,之后每多两个点一定会多一个守卫,这个时候会使第二维某些位置开始空了,最后转移其实只有后几维有效 具体优
        阅读全文
                
摘要:题解 老了,国赛之前敲一个后缀树上LCT和线段树都休闲的很 现在后缀树上线段树合并差点把我写死 主要思路就是后缀树+线段树合并+容斥,我相信熟练的OIer看到这已经会了但就是不想写 但是由于我过于老年化,我还是决定记录一下我的思路 我用后缀自动机建的后缀树,所以是反串的后缀树,我考虑的都是区间字符串
        阅读全文
                
摘要:题解 设$f[p][a][b]$表示询问了$p$次,答案是$a,b$是否会被猜出来 然后判断如果$p = 1$ 第一个问的$Alice$,那么$[s,\sqrt{nm}]$约数只有一个,$f[p][a][b] = 1$否则为$0$ 如果第一个问的$Bob$,那么$a + b 2 S define f
        阅读全文
                
摘要:"题面" 题解 推结论大题……然而我推不出什么结论 奇环显然是NO 如果一个联通块里有两个分离的环,也是NO 如果一个联通块里,点数为n,边数为m m = n + 2的时候,肯定是NO m = n + 1的时候 如果只存在一个双联通分量的话,取出这个双联通分量,存在两个点点度为3 他们之间有3条路径
        阅读全文
                
摘要:题解 每次开这样的数据结构题感想都大概是如下两点 1.为什么别人代码长度都是我的1/2???? 2.为什么我运行时间都是他们的两倍???? 简单分析一下,我们关注一个区间是否合法只关注这个区间有多少个1,有多少个0 有偶数个1,一定合法,因为3的二进制是11,我们只需要111111拼起来一定除得开3
        阅读全文
                
摘要:"题面" 题解 转化一下可以变成所有小于等于r的减去小于等于l 1的 然后我们求小于等于x的 显然是 $\sum_{i = 1}^{n} \sum_{j = 1}^{min(i,x)} sum[i] sum[i j]$ 对于$[x,N x]$前缀和被加了$x$遍 对于$[1,N x]$前缀和被减了$
        阅读全文
                
摘要:题解 对于50个k都维护一个$i^k$前缀和即可 查询的时候就是查询一段连续的区间和,再加上根节点的 代码 cpp include define fi first define se second define pii pair define space putchar(' ') define en
        阅读全文
                
摘要:"题面" 题解 第$i$个数之前的符号是或那么记为0,是与就记为1,得到一个二进数x 然后按位分开考虑,如果这一行是1那么记为1,如果这一位数位0记为0,得到一个二进制数$b_i$ 第$N$行是最高位,如果这一位是1的话,需要有$x define fi first define se second 
        阅读全文
                
摘要:"题面" 题解 考虑我肯定是从一个人出发,开始依次标记,而不会跳过某个人,因为如果我跳过了,那么我之后回来还需要标记它,比不上我等完它再一直走到最后(因为多了走一圈之后走回它的代价) 我们倍长整个序列,我们要求的就是 $Min_{i = 1}^{n}{Max_{j = i}^{i + n 1}{T_
        阅读全文
                
摘要:"题面" 还有这么诚实的出题人! 我们最多影响20个点,然后把这20个点的虚树建出来,并且枚举每个点的选举状态,如果一个点选或不选可以通过改$dp[u][0] = 0$或$dp[u][1] = 0$完成 状态应该不多,因为每条边只有三种选的情况,上限是$3^{m n + 1}$的 然后我们考虑递推出
        阅读全文
                
摘要:题解 把没有门的点缩成一个点 如果$i i + 1$的钥匙大于$i$,那么$i$不可以到$i + 1$,连一条$i$到$i + 1$的边 如果$i i + 1$的钥匙小于$i$,那么$i + 1$不可以到$i$,连一条$i + 1$到$i$的边 按照拓扑序计算,每次暴力向左和向右扩张,每次扩张碰到的
        阅读全文
                
摘要:题解 虽然要求一个dfs序,但是不是从根开始贪心 从最小的点开始贪心,最小的点显然是父亲选了之后马上就选它 那么我们每次把最小的点和父亲合并,两个联通块之间也是如此 对于两个联通块,他们合并的顺序应该是平均值较小的更靠前 因为有两个联通块和为$S_i$和$S_j$,大小为$B_i$和$B_j$ 如果
        阅读全文
                
摘要:题解 读题是做题关键 我们设$dp[u][l][r]$表示$u$节点上方没改$l$条公路和$r$条铁路 然后记忆化搜索,枚举这条点改左边还是右边 代码 cpp include define fi first define se second define pii pair define mp mak
        阅读全文
                
摘要:题解 终于了解怎么动态维护虚树了 就是把点按照dfs序排个序啊 这道题显然是求虚树上所有边长的两倍 我们把dfs序排完序,相邻两个点加上路径长(包括首尾),删除的时候删一个点减去它到两边再加上新近相邻的两个点即可 增加同理 代码 cpp include define fi first define 
        阅读全文
                
摘要:题解 发现我们选择一座桥会选择力$\frac{s + t}{2}$较近的一座桥 然后我们只需要按照$s + t$排序,然后枚举断点,左边取所有s和t的中位数,右边同理 动态求中位数用平衡树维护 代码 cpp include define fi first define se second defin
        阅读全文
                
摘要:题解 点了一个新技能叫杨表(事实上集训的时候听过,但是一直不会 这道题就是让我们找到k个不上升子序列,要求长度加和最大 我们用杨表去维护,但是由于杨表的行数可能是n的,复杂度会炸 我们只维护前$\sqrt{n}$行 有个结论是把杨表排序方式改过来那么我们会得到杨表的转置,我们发现我们只需要求一些列的
        阅读全文
                
摘要:题解 根据一番认真严肃的猜结论和打表证明之后 我们可以得到 $f[i] = (\sum_{a[i] \& a[j] == a[j]} f[j]) + 1$ 统计所有的$f[i] 1$ 然后对于这道题,我们可以从值域上直接做 就是$g[a]$表示$a$作为结尾的数的序列有多少个 每次从$a$转移到$a
        阅读全文
                
摘要:题解 分数题可以想到分数规划,我们预处理出从i到j卖什么货物赚的最多,然后把每条边的边权改成“利润 效率 × 时间” 用spfa找正环即可 代码
        阅读全文
                
摘要:题解 显然要记录每个点来的状态,这样会扩充出点度的平方条边,就gg了 删掉所有的点,把每个边拆成两个点,连一条边权为c 这个时候我们考虑对于原先的每个点,将所有与其相连边所需要的节点(不管是进入还是出去)建一棵虚树,然后用线段树优化建图,优化方法是枚举每个lca,然后将lca的每个子树和其他子树连一
        阅读全文
                
 
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号