随机做题-第二弹

书接上回。

QOJ 4635 Graph Operation

构造题先观察:

  1. 每次操作后,每个点的度数 \(deg_u\) 不变。
  2. 操作是可逆的。这意味着可以同时操作 \(S,T\),最后相遇在某个状态。

我们声称每个点在 \(S\)\(T\) 中度数相同是有解的充要条件

构造方法考虑枚举 \(i=1,2,\dots,n\),设 \(i\)\(S\) 中的邻域为 \(A\),在 \(T\) 中的为 \(B\)

  • \(A=B\),直接把 \(i\) 从图上删去。

  • \(A \neq B\),由于 \(|A|=|B|\),此时一定能找到 \(u \in A,u \notin B, v \notin A,v \in B\)

    我们现在有两种选择:

    • 找到一个点 \(w\) 使得 \(w\)\(S\) 中与 \(v\) 有边,与 \(u\) 无边,然后操作 \((i,u),(v,w)\)
    • 找到一个点 \(w\) 使得 \(w\)\(T\) 中与 \(u\) 有边,与 \(v\) 无边,然后操作 \((i,v),(u,w)\)

    不难发现,如果找不到第一种 \(w\),则一定有 \(deg_v<deg_u\);如果找不到第二种 \(w\),则有 \(deg_u<deg_v\)

    所以两种 \(w\) 必定能找到一种。

用 bitset 模拟上述过程,复杂度 \(O(\frac{n^3}{w})\)

模拟赛题

暴力的做法是每次 ban 掉一条边然后跑费用流。

这样复杂度太高了,考虑优化。我们先随便跑出一个最大权匹配,假设当前边为 \(e=(u,v)\)

  1. \(e\) 在不在当前匹配内。直接输出。

  2. \(e\) 在当前匹配内。考虑删去 \(e\) 后还可以怎么增广。

    也就是连接 \((S,T),(T,S)\),然后在残量网络上找到一条从 \(u\)\(v\) 的路径增广。

    要找到尽可能长的路径,跑 spfa 即可。

QOJ2266 Colorful Rectangle

首先,所有情况一定能够通过置换颜色和旋转对称归约到下面两种情况。

  1. \(0\) 在左上角,\(1\) 在下边,\(2\) 在右边,贡献为 \(2(x_2-x_0+y_0-y_1)\)
  2. \(0\) 在左上角,\(1\) 在中间,\(2\) 在右下角,贡献为 \(2(x_2-x_0+y_0-y_2)\)

现在要解决一个类似三维偏序的问题,先按 \(x\) 扫描线。

先解决第一种情况,考虑维护线段树,每遇到一个 \(0\) 就做前缀修改,遇到 \(1\) 就做后缀修改,遇到 \(2\) 就做单点查询。

然而我们需要保证所有 \(01\) 贡献对的 \(0\) 一定在 \(1\) 之前,这个用类似历史最大值的思想做。

第二种情况严格弱于第一种。随便做做。

P6790 [SNOI2020] 生成树

广义串并联图。

定义:称图 \(G\) 为广义串并联图,当且仅当 \(G\) 不存在同胚与 \(K_4\) 的子图。

人话:不存在四个点 \(a,b,c,d\) 使得这四点之间存在 \(6\) 条除了端点以外两两不交的路径。

广义串并联图有两个性质:

  1. \(m \le 2n\) 时,图是平面图。
  2. 通过重复三种操作可以缩为一个点。
    • “删 \(1\) 度点”,删除度数为 \(1\) 的点。
    • “缩 \(2\) 度点”,若存在边 \((u,v),(v,w)\),则删除 \(v\) ,连接 \((u,w)\)
    • “叠合重边”,把两条重边变成一条。

回到这题,原图是广义串并联图,考虑按上面的过程,对边进行 dp,计算生成树。

缩边过程中每条边 \(e(u,v)\) 都代表了原图的一个子图,记为 \(T(e)\)\(T(e)\)出现在最终的生成树的部分为 \(T'(e)\)

\(f_e\) 表示 \(T'(e)\) 是一个连通块的方案数,\(g_e\) 表示 \(T'(e)\) 是两个连通块(一个包含 \(u\) 一个包含 \(v\) )的方案数。

转移分三种。

  • “删 \(1\) 度点”,此时 \(T'(e)\) 只能是一个连通块,\(ans \larr ans \times f_e\)
  • ”缩 \(2\) 度点“,此时 \(f_{e'}=f_{e1}f_{e2},g_{e'}=f_{e1}g_{e2}+g_{e1}f_{e2}\)
  • "叠合重边",此时 \(f_{e'}=f_{e1}g_{e2}+g_{e1}f_{e2},g_{e'}=g_{e1}g_{e2}\)

注意上面转移是围绕”选出来的部分联通且无环“进行的。

用队列维护 \(deg \le 2\) 的点,模拟上述过程。

QOJ9278 Linear Algebra Intensifies

接上文。

注意到矩阵差分后行列式相等。

于是每次操作可以变成 \(b_{l,l},b_{r+1,r+1}\) 加一,\(b_{l,r+1},b_{r+1,l}\) 减一。

我们把 \(b\) 看作矩阵树定理中的 Laplace 矩阵。每次操作相当于连边 \((l,r+1)\),答案是图 \(G\) 的生成树个数。

我们套用上一题的做法,对 \(G\) 在缩边的时候 dp。

由于 \(G\) 不一定是广义串并联图,所以最后会剩下一个图 \(G'\)

现在问题变成,每条边选有 \(f_e\) 的权值,不选有 \(g_e\) 的权值,求 \(G'\) 每个生成树的权值和。

把每条边的权重设为 \(\frac{f_e}{g_e}\),套用矩阵树定理,把行列式 \(\times \prod g_e\) 得到答案。注意特判 \(g_e=0\) 的情况!!!

\(G'=(V',E'),|V'|=n',|E'|=m'\),求行列式是 \(O(n'^3)\) 的,为什么能过呢?

考虑 \(n'\) 的规模,不难发现进行一次缩边操作后 \(k=m-n\) 的值不增

\(G'\) 中每个点的 \(deg>2\),也就是 \(m'=\frac{\sum deg'_u}{2} \ge \frac{3}{2}n'\)。得到 \(n' \le 2k \le 600\)

模拟赛题

显然破盾以后用 \(\max b_i\) 攻击最优,记 \(mx=\max b_i\)

形式化我们要解决的问题:选出可重集 \(S\),满足在 \(\sum c_i \ge q\) 的前提下,最小化 $|S|+\lceil \frac{p-\sum a_i}{mx} \rceil $。

带分母的式子不好处理,写成 \(\lceil \frac{p+\sum (mx-a_i)}{mx} \rceil\)。经典“贡献-代价”模型,直接背包。

注意有可能不破盾直接杀,此时答案为 \(\lceil \frac{p}{\max a_i} \rceil\)

CF1740G Dangerous Laser Power

好题。

观察一:过程中一束激光的强度单调不降。

观察二:一束激光如果经过了 \((i,j)\),那么它不会再对 \(s \le s_{i,j}\) 的位置产生影响。

我们按 \(s_{i,j}\) 从小到大确定每个 portal 的 \(t_{i,j}\)。(这样就不会有前效性)

记当前进入 \((i,j)\) 的激光强度总和为 \(sum_{i,j}\),数量为 \(cnt_{i,j}\)。那么 \(t_{i,j}=(cnt_{i,j}s_{i,j}-sum_{i,j}) \mod 2\)

思考如何计算 \(sum,cnt\)。考虑一条激光发射的过程:从 \((i,j)\) 出发,经过若干个已确定的 portal,最后到达某个未确定的 portal。

用并查集合并路径,把所有成环的或者逃逸的路径连向特殊点。

模拟赛题

把贡献挂在区间最小值上,设 \([pre_i,suf_i]\)\(a_i\) 是最小值的最大区间。发现贡献的值只和 \(a_i,\max(pre_i,l),\min(suf_i,r)\) 有关。

拆贡献然后扫描线,分讨 \(pre_i,l\)\(suf_i,r\) 的大小关系。

P9923 [POI 2023/2024 R1] Przyciski

网格选点直接建图。

先考虑构造偶数解,此时图上一定存在一条回路。进一步,一定存在一个环。

如果找不到,说明图是个森林。

直接找到每棵树,从下往上构造即可。

P3488 [POI 2009] LYZ-Ice Skates

套用 Hall 定理,当然可以带权。

单点修改,查询 \([\forall T \sub \{1,2,\dots ,n\},\sum_{i\in T}a_i \le k \cdot |\bigcup_{i \in T}[i,i+d]|]\)

最劣情况 \(T\) 肯定是一个区间,改写成 \(\forall [l,r] ,\sum_{i=l}^ra_i \le k(r-l+1+d)\)

\(sum_{l,r}=\sum_{i=l}^r a_i-k\),改写成 \(\forall[l,r],sum_{l,r}\le kd\)

线段树维护最大子段和。

CF1591F Non-equal Neighbours

\(f_i\) 表示考虑前 \(i\) 位的方案数。

转移枚举 \(b_i\) 选什么,容斥,钦定 \(j,j+1,\dots,i\) 都选 \(x\)

改写一下转移式,\(f_i=\sum _{j=1}^i (-1)^{i+j} \cdot \min_{k=j}^i a_k \cdot f_{j-1}\)

posted @   cyz2010  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示