随笔分类 - 网站->LOJ
摘要:题解 一眼就是线段树维护点分树的dfs序嘛 代码debug一年(手动再见) 码力直线下降,坐等滚粗= = 很明显的我们需要一个点分树,然后求出以每个重心为根的树的dfs序,线段树维护一下每个点的价值 每个点到根的距离 对于修改点直接单点修改,对于边相当于修改了一个子树到根的距离,就是dfs序上一段区
        阅读全文
                
摘要:题解 看错题了,以为单次修改相当于一个覆盖,后来才明白“添加”…… 就相当于添加很多线段求最小值 首先这个等差数列添加的方式比较烦人,我们拆开两条链,一条s到lca,一条lca到t 那么s到lca上的点x值就是$ A dis[x] + A dis[s] + B$ lca到t上的点x值就是$A dis
        阅读全文
                
摘要:题解 我们对于B串建出后缀自动机和序列自动机 对于问题1,枚举左端点然后跑后缀自动机,直到不能匹配作为这个左端点的答案 对于问题2,枚举左端点然后跑序列自动机,直到不能匹配 对于问题3,设f[i][j]表示第前i个字符匹配到后缀自动机上第j个点的最少步数,如果下一步走不了则更新答案 对于问题4,设f
        阅读全文
                
摘要:题解 虽然我知道minmax容斥,但是……神仙能想到把这个dp转化成一个一次函数啊= = 我们相当于求给定的$S$集合里最后一个被访问到的点的时间,对于这样的max的问题,我们可以用容斥把它转化成min问题 也就是 $max{S} = \sum_{T \subset S} ( 1)^{|T| + 1
        阅读全文
                
摘要:题解 用$f[i][j]$表示考虑了前i个排名有j个人被碾压 $f[i][j] = f[i 1][k] \ C[k][j] \ C[N k 1][N r[i] j] \ P[i]$ P[i]是成绩排列的方式,意义是在前面k个人里选了j个来碾压,并将人数空缺用上一次没有碾压的来填补 $P[i]$怎么求
        阅读全文
                
摘要:题解 有什么LNOI啊,最后都是JLOI罢了 一道非常……懵逼的统计题 当然是容斥,所有的方案 至少有一个点坏掉的正方形 + 至少有两个点坏掉的正方形 至少有三个点坏掉的正方形 + 至少有四个点坏掉的正方形 总共的方案就是 $\sum_{i}^{min(n,m)}i \ (n i + 1) \ (m
        阅读全文
                
摘要:题解 童年的回忆! 想当初,这是我考的第一次省选,我当时初二,我什么都不会,然后看着这个东西,是不是能用我一个月前才会的求lca,光这个lca我就调了一个多小时= =,然后整场五个小时,我觉得其他题不可做,一直杠这题的20分,然后。。。day1爆零了,之后day2手玩提答好像骗了一点,总归是没爆零 
        阅读全文
                
摘要:题解 我们发现只有从第一个往后数,用乘号联通的块是有贡献的 为什么,因为后面所有表达式 肯定会有 + ,还会有个 ,贡献全都被抵消了 所以我们处理出前缀乘积,然后乘上表达式的方案数 答案就是$\sum_{i = 1}^{n 1} S[i] 2 3^{n 1 i} + S[n]$ 设新值为v,旧值为u
        阅读全文
                
摘要:题解 我一开始写的最小表示法写的插头dp,愉快地TLE成60分 然后我觉得我就去看正解了! 发现是容斥 + 矩阵树定理 矩阵树定理对于有重边的图只要邻接矩阵的边数设置a[u][v]表示u,v之间有几条边就好 我们枚举哪些公司不用,然后用矩阵树求一下生成几棵树,复杂度$2^{n 1}(n 1)^3$ 
        阅读全文
                
摘要:题解 这道题的费用流如果朴素一点怎么建边呢 建出$\sum_{i = 1}^{n} p^{i} M$个点,第$i$个厨师的第$j$个点表示这个厨师倒数第$j$个做的是某道菜 这个点向汇点流一条流量为1,费用为0的边 然后每个菜建出来一个点,源点向每个菜流容量为$p$,费用为0的点,第$k$个菜想第$
        阅读全文
                
摘要:题解 二分答案 求最小路径点覆盖 由于这里最小路径点覆盖,点是可重的,用floyd求出传递闭包(也就是求出,哪两点之间是可达的) 最后用这个floyd求出的数组建出一个新图,在这个图上跑普通的最小路径点覆盖即可 代码
        阅读全文
                
摘要:题解 就是字符集较大需要离散化和建边表的后缀自动机水题 每次会加入i个新的串,其中重复的就是i的父亲节点所在节点的长度,减掉即可 代码 cpp include include include include include include define enter putchar('\n') def
        阅读全文
                
摘要:题解 代码7.1KB,人傻代码长 恶心死我了这代码真的把我写恶心了= = 想一想就知道这个东西……维护到中心的差分,然后用二维线段树维护一下矩形的gcd 嗯,我说完了,你写吧。 首先这个二维线段树的单点修改啊,要把第一维遍历过的节点也修改了,还不能直接修改,需要把第一维的左右子树里套的线段树拿出来合
        阅读全文
                
摘要:题解 矩阵乘法,注意需要快速乘 矩阵2 2 a c 0 1 代码
        阅读全文
                
摘要:题解 神仙网络流啊…… naive的我一直想把每个纵轴拆点,每个纵轴建R个点(大概是要跑费用流吧……)……然后第二个限制就gg了,什么也想不出来,菜啊TAT 后来我发现大神们的建图都是,一个原点,一个汇点,一段长条,每一段就是一个点,流量是值,那么最小割就是最小值了,很神奇 然后每相邻的两个纵轴z向
        阅读全文
                
摘要:题解 干脆题解套题解好了 毕竟我的hash方法是抄小迪的 https://www.cnblogs.com/RabbitHu/p/9165770.html 小迪太巨了%%% 之前模数是八位的WA了几个点,换成9位模数就都过了 代码 cpp include // define ivorysi defin
        阅读全文
                
摘要:题解 我们统计深度对于bfs序统计,树结构出现分歧的地方必然是BFS序的最后一段,这个最后一段同时还得是dfs序上连续的一段 如果不是bfs序的最后一段,那么必然下一层会有节点,如果树结构分歧了,那么dfs序是不一样的 如果不是dfs序上连续的一段,如果分歧那么bfs序会改变。。。 好的,知道了这两
        阅读全文
                
摘要:题解 写水题放松一下心情 二进制有个很好的性质是每一位是独立的,我们按位贪心,先看这一位能不能填1,然后看看如果这一位填0那么运算后最后这一位是不是1,是的话就退出,然后看看这一位如果填1最后是1这一位就填1,否则就退出 一次性把所有位填0,所有位填1,然后算两遍,复杂度$O(n + \log m)
        阅读全文
                
摘要:题解 想出了一个神奇的技巧 我们先把串反过来(因为我们需要起始位置的值而不是终止位置的值),每个点维护一下 fail树上子树里的点,作为正数绝对值最大的两个数,作为负数绝对值最大的两个数 我们发现这个两两相乘的最大值肯定是一个后缀最大值,我们对每个节点求一个最大值存到这个节点的len处理出后缀最大值
        阅读全文
                
摘要:题解 k叉哈夫曼树,但是没有了二叉那样的最后一定能合并成一个树根的优秀性质,我们就不断模拟操作看看到了哪一步能用的节点数 // define ivorysi define enter putchar('\n') define space putchar(' ') define fi first de
        阅读全文
                
 
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号