做题记录 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)\)

代码

参考

posted @ 2025-07-22 07:42  Hstry  阅读(37)  评论(0)    收藏  举报