2025.5.13 NOI 模拟赛 题解

比赛

T1 NFLS #P12848. 令人闻风丧胆的英文名称

题意

给定一个长为 \(n\) 的括号序列 \(s\)(不一定匹配),\(q\) 次询问每次给定 \([l,r]\),求 \(l\le a\le b\le r\)\(s[l,a)\cup s(b,r]\) 为合法括号序列的 \((a,b)\) 数量,\(n\le2500,q\le4\times10^6\)

分析

\(dep_i=\sum_{j=1}^i ([s_j=\text{'('}]-[s_j=\text{')'}])\),令 \(nx_l=\min\{r\mid dep_r-dep_{l-1}<0\}\),若不存在则为 \(n\),令 \(pr_r=\max\{l\mid dep_r-dep_{l-1}>0\}\),若不存在则为 \(1\),则对于询问 \([l,r]\)\((a,b)\) 合法当且仅当 \(dep_{a-1}-dep_{l-1}+dep_r-dep_b=0,nx_l\ge a,pr_r\le b\)

第一个条件等价于 \(dep_{a-1}-dep_b=dep_{l-1}-dep_r\),枚举区间 \([l,r]\),将 \(dep_{l-1}-dep_r\) 的划分到同一等价类,则第一个条件等价于只统计相同等价类中的区间

后两个条件相当于静态二维数点,容易扫描线维护

时间复杂度 \(O(n^2\log n+q)\)

代码

从另一个角度考虑以上条件,存在 \(O(n^2+q)\)\(dp\) 做法

T2 NFLS #P3313. 路径压缩

题意

给定 \(f_{1\sim n}\),通过并查集的 \(\text{find}\)\(\text{unite}\) 将其变为 \(g_{1\sim n}\),求出具体方案或判定无解,\(n\le1000\),多测 \(T\le10^5,\sum n^2\le5\times10^6\),保证 \(f\) 合法

分析

\(g\) 成环或 \(f\) 中的连通块在 \(g\) 中不连通,显然无解

否则考虑 \(g\) 中一个连通块,它由 \(f\) 中若干连通块组成,设这些连通块的根为 \(r_{1\sim k}\),则 \(g\) 的根必为其中某一个

\(g\)\(r_x\)\(r_y\) 的父亲,则某时刻必然进行了操作 \(\text{unite}(r_y,r_x)\)

\(\text{find}\) 操作只会破坏祖先后代关系,不会新增,因此若 \(g\) 中存在 \(x\)\(y\) 的祖先,则从 \(x\)\(y\) 所属连通块合并到结束,\(x\) 都是 \(y\) 的祖先

\(x\)\(y\)\(f\) 中不在同一连通块而 \(g\) 中两者属于同一连通块,且 \(g\)\(x\)\(y\) 的祖先,则 \(x\) 必须为它所在连通块的根,且合并时 \(y\) 的连通块的根接到 \(x\)

枚举 \(i\),若 \(f_i\ne g_i\),则必须对 \(i\) 进行 \(\text{find}\) 操作,且在所有 \(\text{merge}\) 操作之前进行一定最优

扫描一遍后,若仍然有 \(f_i\ne g_i\),此时 \(f_i\) 值为 \(i\) 所在连通块的根,则 \(\text{merge}\) 过程中(即两者间的祖先后代关系被破坏前)有 \(g_i\)\(f_i\) 的祖先

将这些关系建出图(\(x\to y\) 表示 \(y\)\(x\) 的祖先),若存在环则必然无解,否则得到拓扑序,按拓扑序枚举 \(p\),假设以当前的 \(f\)\(g\) 按之前的方式建出图,令 \(q\)\(p\) 连向的点中在拓扑序中最靠前的,若 \(p\) 出度不为 \(0\),则 \(\text{unite}(p,q)\),然后枚举 \(i\),若 \(f_i\ne g_i\)\(\text{find}(i)\)

若操作结束后 \(f\)\(g\) 不同则无解,否则得到一组合法解

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

代码

T3 NFLS #P2615. 通道建设

比赛结果

\(100+40+3\)\(\text{rk}32\)

posted @ 2025-05-13 19:02  Hstry  阅读(13)  评论(0)    收藏  举报