2025.3.31

3.31 ZKY 题单练习

F - AND-OR closure

引用

key:\((a \lor b) \land c= (a\land c) \lor (b\land c)\)

于是先考虑 And-closure,再考虑 Or-closure

And 能尽可能把二进制位“拆开”,这样 Or 可以进行任意合并。

但是“拆开”是不完全的,若所有第 \(i\) 位为 \(1\) 的数,第 \(j\) 位都为 \(1\),那么第 \(i\) 位是依赖第 \(j\) 位的,既最后选数的时候,选 \(i\) 必须选 \(j\)

正常做法:toposort + 折半

奇妙做法:建立点集与 DAG 上最小表示法的一一对应,即为无向图上的独立集个数。

G - Graph Race

利用 \((1,v)\) 有边的性质,将 \(dis(u,v)\) 转化为 \(dis(u,1)\)

\(dis(u,v)=dis(u,1)+x,x\in\{-1,0,1\}\)

不妨记 \(f(u,x)=a_u-b_u(dis(u,1)+x)\),显然有 \(f(u,-1)\ge f(u,0)\ge f(u,1)\)\(f(u,1)\) 一定能取到,故不妨初值 \(ans_v=\max_u f(u,1)\)

考虑什么时候 \(x\le 0\),发现从 \(u\) 走到 \(v\) 的过程中,经过的边 \(u'\to v'\),若全满足 \(dis(u',1)=dis(v',1)+1\),则 \(x=-1\);否则最多走 \(1\)\(dis(u',1)=dis(v',1)\) 的边,此时 \(x=0\)

按照是否走过 \(dis(u',1)=dis(v',1)\) 建分层图。
具体的,对于原图中 \(dis(u,1)=dis(v,1)+1\),建边 \(u\to v,u+n\to v+n\);对于 \(dis(u,1)=dis(v,1)\),建边 \(u\to v+n,v\to u+n\)

\(u\) 能到点 \(v\),则 \(ans_v\)\(f(u,-1)\) 更新;\(u\) 能到点 \(v+n\) ,则 \(ans_v\)\(f(u,0)\) 更新。

在 DAG 上 topo dp 即可。

J - Holiday Regifting

从链的情况启发 -> 如果知道所有入点的周期和一个周期内当前点加的数量,那么当前点需要 \(\frac{c_i}{gcd(a_i,c_i)}\) 个周期才能变成 \(0\)

按照拓扑序遍历每个点,更新答案即可。

M - Graph coloring

完全图,条件等价于每个点入边和出边颜色集合不交。

不妨钦定入边颜色集合 \(S_i\),要求出边 \(\in U-S_i\)

显然若 \(\forall i,j, S_i\nsubseteq S_j \And S_j \nsubseteq S_i\),则一定能给边 \((i,j)\) 合法赋值。

最大独立集是 \({14\choose 7 }> 3000\),做完。

N - Rotate and Play Game

结论:一定能选到最大的 \(\frac{n}{2}\) 个。

转化为折线,较大的一半 \(+1\),较小的一半 \(-1\),要求折线在 \(x\) 轴以下。

以折线最高点为起点即可。

O - 区间切割

考虑只在特定情况下暴力。

将区间分成 | B | len-2B | B |,保证在 B 内切一定留另一边,于是就可以只在中间暴力切,两边维护 \(\max l,\min r\) 即可。

\(B=\frac {n}{3}\),每次暴力在中间切长度至少去掉 \(\frac{1}{3}\),故只会切 \(\log m\) 次。

扫描线 + 线段树维护 \(t\),单点修改,区间chkmin,查询 \(p\) 左边/右边第一个 \(< t\) 的位置。

复杂度 \(O(n\log^2m)\)

posted @ 2025-04-02 21:23  Cindy_Li  阅读(46)  评论(0)    收藏  举报