「Log」2024.1.2 小记
序幕
\(\text{6:40}\):上班,调题。
LCT 板子调不出来,飞舞了。
两个懒标记搞混了几次,最后发现加法标记下传的时候没有乘 \(siz\),改完就过了。
\(\color{blueviolet}{P1501}\)
LCT 板子,链加链乘查询链和,断边加边。
间幕 \(1\)
三叉神经树,之前就想写这题了。
题解看了半天,发现自己对 LCT 理解不够透彻,恶补了一下。
写完发现只有小点过不了,而且答案刚刚好全反,最后发现 >> 1
写成 >> 2
了,这能拿 \(90pts\) 是没想到的。
\(\color{black}{P4332}\)
LCT 爆踩树剖的非常好题目啊。
将节点分为四种,子节点值为 \(1\) 的个数分别为 \(0/1/2/3\),叶子节点统一视为 \(0/2\)。
考虑一个叶子节点改变时会向上影响一段连续的 \(1/2\),于是考虑维护区间第一个不为 \(1/2\) 的节点编号(splay 内)。
然后修改就相当于 \(1/2\) 的翻转,把需要操作的区间打个标记即可。
间幕 \(2\)
快速进入午休,中午吃了好久没吃的肥牛烤肉饭。
然后就是睡睡睡,下午两点出头苏醒。
开一道 DP,大概想了半小时就去看题解了,主体思路还差不多。
非常神秘的状态以及转移,感觉整个代码量级挺大的。
码完一直 RE,局部变量没赋初值,改完就过了。
怎么这么多弱智错误啊。
\(\color{blueviolet}{P4649}\)
非常仙 DP 题。
题意转化是简单的,求去掉一些非树边使得图中不存在偶环的最小代价。
如果一条边两端点的树上路径长度为奇那么此边必须删掉。
剩余的边会在树上会组成一些奇环,两奇环一旦相交于某条边就会产生一个偶环。
相当于每条非树边会覆盖掉其两端点树上简单路径的树边,要求每条树边至多被选出的非树边覆盖一次。
考虑先全删掉,尽量保留一些代价大的边,对于每条非树边考虑挂在其端点的 LCA 上进行处理。
设 \(f_{i, S}\) 表示节点 \(i\) 子树内,对于 \(\forall x \in S\),都有边 \((i, x)\) 已经被覆盖的状态下得到的最大代价。
对于挂在点 \(i\) 上的一条非树边 \((u, v)\),选择其产生的贡献为 \(w + [u \not= i]f_{u, 0} + [v \not= i]f_{v, 0}, \sum \limits_{x \in (u \to v) \land x \not \in \{u, v, i\}} f_{fa_x, \{x\}}\),\(w\) 为边权,求和部分即去掉链端点和 LCA 的贡献。
对于每一条边都尝试更新一边当前点的 DP 数组,复杂度可以接受。
间幕 \(3\)
速通掉晚饭,点杯奶茶喝喝。
进入到今天的下半场刷题时间,开了到 DP,刚好是往年省选,感觉没咋思考就看题解了,发现不咋难,打了一会就秒了。
\(\color{blueviolet}{P3262}\)
深度只有 \(10\) 的完全二叉树,发现一个叶子结点的贡献只跟祖先节点状态有关,DFS 时枚举祖先状态,这样可以得到叶子结点贡献,再用类似背包的转移上去,复杂度主定理分析或者分析每个节点遍历次数都可以得到是 \(O(4^{n - 1}(n - 1))\) 的,可以接受。
状态是 \(f_{i, j}\) 当前枚举的状态下,节点 \(i\) 子树内选择了 \(j\) 个农民去当兵的最大贡献。
\(\color{royalblue}{P3745}\)
平凡题。
不难发现代价只与最晚发布成绩相关,先预处理每个时间发布成绩学生的不愉悦度,然后从后向前枚举最晚成绩发布时间。
计算贡献只要做前缀和,分别尝试只用 \(2\) 操作和尽量用 \(1\) 再用 \(2\) 调整。
\(\color{blueviolet}{P3746}\)
脑子题。
从组合意义上理解,要求的即从 \(nk\) 个物品中选出 \(x\) 个满足 \(x \mod k = r\),然后对这个进行一个 DP,设 \(f_{i, j}\) 表示前 \(i\) 个物品中选出个数余数为 \(j\) 的总方案数。
转移方程为 \(f_{i, j} = f_{i - 1, j} + f_{i - 1, (j - 1 + k) \mod k}\),有初值 \(f_{0, 0} = 1\)。
显然可以用矩阵优化转移,于是就完事了。
尾声
尝试学习欧拉函数相关知识,被击败了,明日再战。