做题记录 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}\),转移为
容易 \(\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)\)

浙公网安备 33010602011771号