做题记录 25.7.21
[2025“钉耙编程”中国大学生算法设计暑期联赛(2) 1002] 数上的图
答案不超过 \(3\):先用操作一删去 \(x\) 除 \(\text{lowbit}\) 之外的位,然后将这一位移到 \(y\) 的 \(\text{lowbit}\),最后补全 \(y\) 的剩余位
显然该过程合法
答案为 \(0/1\) 的情况是容易判断的
答案为 \(2\) 当且仅当 \((2^{\text{count(x)}}-1)\times \text{lowbit}(y)\le n\) 或 \((2^{\text{count(y)}}-1)\times \text{lowbit}(x)\le n\)
剩余情况答案为 \(3\)
[2025“钉耙编程”中国大学生算法设计暑期联赛(2) 1006] 半
显然二维数点,时间复杂度 \(O(\sum n\log n)\)
\(\textcolor{purple}\odot\) P9481 [NOI2023] 贸易
显然 \(dis(i,j)=dis(i,\text{lca}(i,j))+dis(\text{lca}(i,j),j)\),令 \(dep_i\) 为 \(i\) 到根的路径上的边权和,则显然 \(dis(i,\text{lca}(i,j))=dep_i-dep_{\text{lca}(i,j)}\)
令 \(dp_u\) 为 \(u\) 的深度(即它到根所经过的边数),\(f_{d,i}=dis(u\mid (dp_u=d,i\in subtree(u)),i)\)
初始 \(f\gets \infty\),每加入一条边 \((u,v,w)\),枚举 \(u\to v\) 链上的点对 \((i,j)\)(即一条直链上从上到下一次为 \(u,j,i,v\)),\(f_{dp_j,i}\gets dep_j-dep_u+w+dep_v-dep_i\)
考虑完所有边后枚举一条直链上的 \(i,j,k\),令 \(f_{dp_k,i}\gets f_{dp_j,i}+f_{dp_k,j}\)
问题转化为计算 \(\sum_u\sum_v (dep_u-dep_{\text{lca}(u,v)}+f_{dp_{\text{lca}(u,v)},v})\)
枚举 \(v\) 和 \(\text{lca}(u,v)\),通过一定预处理容易 \(O(n2^n)\) 求出
总时间复杂度 \(O(n^2m+n^22^n)\)

浙公网安备 33010602011771号