恭喜这个蒟蒻模拟赛再次刷新下限!
连续两天的模拟赛刷新了两个角度的下限!我真是太区了!
\(8.4\)
P2194
- 得分 \(100\),通过时间 \(10 \text{min}\)。
你说得对我一开始都复制好模板了还是没拿到首 A。
这个显然 SCC 缩点,每个 SCC 内部用一个点即可,显然选点权最小的。
至于方案,统计每个 SCC 内最小值的数量,乘法原理即可。
- 死因:题读错了(没注意到还要能回到 \(i\)),浪费了一定的时间。
P3436
- 得分 \(0\),通过时间无。
你说得对这道除了细节都简单我没分。
注意到它没说到了公司就不能出去再回来了。
赛时有档部分分 DAG 秒了啊,用 \(f_u\) 表示 \(u\) 出发的上班方案数,转移很平凡啊,建反图 topo 一下就行啊。
然后不会做了啊。
注意到一个大小大于 \(1\) 的 SCC 内部是可以绕环的喵,路径有无数条,缩点后直接特判啊可以。
注意这题还有自环啊,自环也可以绕环无限条啊喵。
- 死因:认为重复一条边边集只算一次,也就是绕环算一种方案;没考虑自环;需要提高读题能力和 corner 能力了。
六花的勇者
$\text{Problem}$


找不到原。
对啊就是这道题让我写到模拟赛快结束。
这个分讨直接秒了啊。
直接枚举魔神的位置显然不好做啊,考虑由汇合点计算其对每个位置的贡献。
记 \(\operatorname{LCA}(x ,y) = l\)。
- 对于 \(l\) 子树外,所有节点都被增加贡献 \(l\)。
- 对于 \(x / y \rightsquigarrow l\) 的路径中的每个节点 \(i\),其子树内去除含 \(x / y\) 的儿子子树(\(x / y\) 则没有),每个节点都增加 \(i\)。
好了直接上重工业维护第一个。
考虑 DFN 序中子树是连续的一段,第一种操作直接在 DFN 序上差分即可。
第二种操作直接等价为子树加 \(i\) 儿子子树内含有 \(x / y\) 的减 \(i\),记 \(\Delta_i\) 为 \(i\) 的变化量,可以发现 \(\Delta_i = \Delta_{fa} + i - fa\);对于多组询问,用树上差分记录点 \(i\) 应该加/减各 \(pl_i / del_i\) 次,那么 \(\Delta_i = \Delta_{fa} + i \times pl_i - fa \times del_i\),\(Q\) 询问后一遍 DFS 即可计算。
- 死因:无脑重工业好像哪里假了调不出来,真的要 think twice code once 了。
CF475E
羡慕能出出这种题的出题人。
考虑特殊性质 \(m = n - 1\)(树),难以想到有一种构造方法,枚举一个根节点 \(rt\),对于其所有儿子子树内的边,一些儿子子树向上,其余的向下。

记有 \(x\) 个儿子向上,剩下 \(n - 1 - x\) 个向下,答案贡献为 \(x(n - 1 - x)\),显然 \(x\) 越接近 \(\frac{n - 1}{2}\) 越好。
这个可以直接背包,复杂度 \(\mathcal O(n^3)\),注意到我们只关注一个数是否能被加出来,是个可行性背包,用 bitset 优化到 \(\mathcal O(\frac{n^3}{w})\),这样树就结束了,不知道正确性但它是对的,感性理解就是子树一上一下必然不优。
考虑无向图,注意到边双内部的点一定能通过定向互相到达,边双缩点后就是一棵树,每个节点权值为边双内部的节点数 \(w_i\),边双内部贡献 \(\sum w_i^2\),其余 \(x(n - w_{rt})\),同样背包即可。
但是这样过不去 NFLS \(1\le n\le 10^5\) 啊,其实 TJ 区也有办法。
发现一棵普通树最优秀的根一定是两个重心的一个,注意到非重心作根一定有一个儿子子树大小超过 \(\frac{n}{2}\),它一定单个作向上/向下的子树,这样可以只对至多 \(2\) 个点 DP,但是复杂度还是 \(\mathcal O(n^2)\) 起步。
不容易证明重心一定不劣,只对它们 DP 即可,边双就是带权重心,复杂度 \(\mathcal O(\frac{n^2}{w})\)。
- 死因:压根没怎么想,构造肯定想不到。
upd:啊哈怎么还有类似题。
分数 \(100 + 0 + 10 + 0 = 110\),我刷新了暑期模拟赛得分下限!!!
\(8.5\)
UOJ136
注意到下、右、Fn 一定不劣,注意到这点就做完了。
- 死因:注意到右、下可能更劣,没错我是右、下。
JZOJ1282
$\text{Problem}$
找到原但是一个没听说过的网站,题目是 JZOJ1282。


为了让你练习对拍,特意不给大样例!
啊哈直接无脑暴力可以 \(\mathcal O(n^2m)\) 啊还跑不满,实测能过 \(n = m = 400\),但是记录数字的数组只开到 \(10^3\) 挂了 \(10\) 分。
显然可以枚举矩阵的下边界 \(i\),惊人的考虑每种数字对答案的贡献。
你会发现数字 \(x\) 的贡献只有在 \(i\) 行以前第一次出现的列 \(l_x\) 和第二次出现的列 \(r_x\) 之间 \([l_x ,r_x)\) 有贡献,做完了。
但是这是计算一种数字的贡献啊,所以每次遇到新的还要删除旧贡献,最终计算显然是以 \(i\) 行最后一次出现的 \(x\) 为基准计算。
但是这还是 WA 啊,你发现当 \(l_x\) 列出现多于 \(2\) 个列时贡献是 \(0\) 啊!前缀矩阵必然回选到这两个 \(x\),然后做完了。
- 死因:没想到贡献法,感觉也没想到 \(l_x ,r_x\) 的实力。
P6533
nfls 数据 \(1\le n\le 10^6\),\(mod = 1e9 + 7\) 其余一样。
这个 \(c\) 咋这么小啊,显然正难则反,有个暴力 DP 就是 \(f_{i ,j}\) 前 \(i\) 个恰好 \(j\) 个人彩色的方案数啊,转移平凡,滚动一下变成一维,复杂度 \(\mathcal O(qnc)\)。
总方案显然是 \(\prod_{i = 1}^n (a_i + b_i)\)。
这个蒟蒻写了 up(j ,0 ,i) 而非 up(j ,0 ,min(i ,c)) 挂了 \(30\) 啊啊啊。
好了继续啊,发现这个很可矩阵优化的样子啊,复杂度 \(\mathcal O(q\log nc^3)\),恭喜负优化了哈。
鉴定为打了一场 matrix duel 然后矩阵用傻了。
考虑直接挂节点 \(f_{u ,i}\) 为节点 \(u\) 代表区间选恰好 \(i\) 个的方案数啊,转移平凡,复杂度 \(\mathcal O(q \log n c^2)\),可过 P6533 啊,但是这个计算总方案修改要用到逆元,P6533 模数很小啊(良心出题人),把总方案也用 SGT 维护即可。
回到 nfls 这题啊,发现这个背包就是删除一个物品 \((a_p ,b_p)\) 再加入物品 \((x ,y)\),初始预处理背包然后用回退背包即可,复杂度 \(\mathcal O(Q \log V + (n + Q)c)\),\(\log V\) 是求逆元。
TJ 区也有用回退背包但是不用注意模数的方法啊。
- 死因:矩阵用傻了,没有跳出来,回退背包不扎实。
hihocoder #1381
有一棵 \(n\) 个节点的树, 每条边都有正的边权 \(w_i\)。
你要回答 \(Q\) 个询问,每次会删掉这个树中的 \(k\) 条边,这棵树被分成 \(k + 1\) 个连通块。输出每个连通块中最远点对距离的和。
这里的询问是互相独立的, 即每次都是在原树上进行操作。
\(1\le n ,\sum k \le 1\times 10^5\),\(1\le w \le 10^9\)。
两棵树合并后的直径两端点,一定在两棵树直径的端点上,这个都知道。
这个啥根据 DFN 序合并直径。
不具体补了。
- 死因:不会 \(k = 1\),DFN 序连通块合并直径完全想不到。
得分 \(70 + 60 + 20 + 30 = 180\),刷新暑期模拟赛通过题目数量下限!!!
本文来自博客园,作者:2021zjhs005,转载请注明原文链接:https://www.cnblogs.com/2021zjhs005/p/22244899

浙公网安备 33010602011771号