做题记录 25.7.1

\(\textcolor{blue}\odot\) CF1713E Cross Swapping

发现 \(a_{i,j}\) 只可能与 \(a_{j,i}\) 互换

\(s_i\) 表示是否操作 \((i,i)\),则 \(a_{i,j}\)\(a_{j,i}\) 互换当且仅当 \(s_i\ne s_j\)

依次枚举 \((i,j)\mid j>i\),对于目前考虑的 \((i,j)\),若 \(a_{i,j}=a_{j,i}\) 则跳过,否则若 \(a_{i,j}<a_{j,i}\) 优先尝试令 \(s_i=s_j\),否则尝试令 \(s_i\ne s_j\),若失败则只能使用另一种情况,用并查集维护

时间复杂度 \(O(\sum n^2\alpha(n^2))\)

代码

\(\textcolor{purple}\odot\) CF1712E2 LCM Sum (hard version)

显然可以转化为求 \(\binom{r-l+1}3-\sum_{l\le i<j<k\le r}[\text{lcm}(i,j,k)<i+j+k]\)

\(x=\text{lcm}(i,j,k)\),令 \(a=\frac xi,b=\frac xj,c=\frac xk\),显然有 \(a>b>c\),且 \(\text{lcm}(i,j,k)<i+j+k\) 等价于 \(\frac 1a+\frac1b+\frac1c>1\)

\(c\ne 1\) 时:

\(c\ge 3\)\(\frac1a<\frac1b<\frac1c=\frac13\),必然有 \(\frac1a+\frac1b+\frac1c<1\) 不成立,因此 \(c=2\)

同理 \(b\ge 4\) 时不成立,可得 \(b=3\)

\(\frac1a+\frac1b+\frac1c>1\),即 \(\frac1a+\frac13+\frac12>1\),即 \(a<6\)

综上 \((a,b,c)\)\((5,3,2)\)\((4,3,2)\),因此 \(i:j:k\) 等于 \(3:4:6\)\(6:10:15\),即这种情况的贡献为 \(\max(0,\lfloor\frac r6\rfloor-\lceil\frac l3\rceil+1)+\max(0,\lfloor\frac r{15}\rfloor-\lceil\frac l6\rceil+1)\)

\(c=1\) 时显然条件必然成立,因此转化为求 \(\sum_{l\le i<j<k\le r}[i\mid k][j\mid k]\)

对于一个 \(l\),令 \(cnt_i=\sum_{l\le x<i}[l\mid i]\),则 \(\sum_{l\le i<j<k\le r}[i\mid k][j\mid k]=\sum_{i=l}^r \binom{cnt_i}2\)

离线询问,对 \(l\) 从大到小扫描线,一个 \(l\)\(cnt\) 的影响不超过 \(\frac Vl\) 处,用树状数组维护 \(\binom{cnt_2}2\) 的区间和,并回答询问

时间复杂度 \(O(t\log V+V\log^2 V)\)

代码

参考

\(\textcolor{blue}\odot\) CF1710C XOR Triangle

一组 \((x,y,z)\) 合法当且仅当 \((x\oplus y)+(x\oplus z)>(y\oplus z),(y\oplus x)+(y\oplus z)>(x\oplus z),(z\oplus x)+(z\oplus y)>(x\oplus y)\),显然位之间独立,枚举可得对于任意 \((x,y,z)\mid (x,y,z\in\{0,1\})\) 都有 \((x\oplus y)+(x\oplus z)\ge(y\oplus z),(y\oplus x)+(y\oplus z)\ge(x\oplus z),(z\oplus x)+(z\oplus y)ge(x\oplus y)\),因此三个条件各只要有一位满足即可

\(dp_{i,0/1,0/1,0/1,0/1,0/1,0/1}\) 表示 \(i\sim n\) 位中 \(x,y,z\) 分别是否贴到 \(n\)\((x\oplus y)+(x\oplus z)>(y\oplus z),(y\oplus x)+(y\oplus z)>(x\oplus z),(z\oplus x)+(z\oplus y)>(x\oplus y)\) 的位分别是否出现

转移是简单的

时间复杂度 \(O(n)\),常数较大

代码

参考

\(\textcolor{purple}\odot\) CF1709F Multiset of Strings

转化为一棵 \(n+1\) 层的完全二叉树,除根外每个点 \(s\) 向它父亲连边的容量为 \(c_s\),以根为源点向下流,要使得流到最后一层的总量恰好等于 \(f\),且 \(c_s\in[0,k]\),求方案数

显然大小相同的子树内答案相同

\(f_{k,s}\) 表示第 \(k\) 层向父亲连边中流量为 \(s\) 的方案数

显然 \(f_{n,\ast}=1\),答案为 \(\sum_{a+b=f}f_{1,a}f_{1,b}\),转移为

\[f_{i,v}\gets \sum_{a+b>v}f_{i+1,a}f_{i+1,b}+(k-v+1)\sum_{a+b=v}f_{i+1,a}f_{i+1,b} \]

容易 \(\text{NTT}\) 和前缀和优化

时间复杂度 \(O(nk\log k)\)

代码

参考

\(\textcolor{purple}\odot\) CF1709E XOR Tree

对于子树 \(u\),显然存在一种只改变 \(a_u\) 的方法,使得所有经过 \(a_u\) 的最短路径的权值都不为 \(0\)

从下到上考虑,显然子树的根点权必须改变时才改变点权一定最优

\(d_u\)\(u\)\(1\) 的链上的权值和

\(S_u\) 为子树 \(u\) 内的 \(d\) 的集合,若一个点被操作则忽略它和它子树内的 \(d\)

初始将 \(d_u\) 加入 \(S_u\)

枚举 \(u\) 的儿子 \(v\)\(u\) 不被操作当且仅当 \(\forall x\in S_u,y\in S_v\),有 \(x\oplus y\ne a_u\)

因此枚举 \(x\in S_v\)(若 \(|S_v|>|S_u|\) 则交换两者),若 \(x\oplus a_u\in S_u\)\(a_u\) 必须被改变,答案加一

考虑完后将 \(S_v\) 并入 \(S_u\)

时间复杂度 \(O(n\log^2 n)\),若使用 unordered_set 则可做到 \(O(n\log n)\)

代码

参考

\(\textcolor{blue}\odot\) CF1706E Qpwoeirut and Vertices

建立 \(\text{Kruskal}\) 重构树,转化为求 \(l\sim r\)\(\text{lca}\),预处理相邻两个之间的 \(\text{lca}\),则 \([l,r)\) 内编号的最大值为区间 \(\text{lca}\)

时间复杂度 \(O(m\alpha(n)+n\log n+q)\)

代码

参考

\(\textcolor{blue}\odot\) CF1707C DFS Trees

显然 \(\text{MST}\) 唯一

显然错误算法每次求出的为一棵 \(\text{DFS}\) 生成树,只有树边和返祖边

要使树边与 \(\text{MST}\) 重合,则不在 \(\text{MST}\) 中的边必然都是返祖边

因此对于一条非 \(\text{MST}\)\((u,v)\),以 \(u-v\) 中一条边为根情况下,令子树 \(u,v\) 中的点权都加一,最终点权为 \(m-(n-1)\) 的点作为根时非 \(\text{MST}\) 边都是返祖边

可证它们同时满足题目要求

时间复杂度 \(O(m\log n)\)

代码

参考

posted @ 2025-07-02 07:23  Hstry  阅读(4)  评论(0)    收藏  举报