2025.4.25 NOI 模拟赛 题解

比赛

T1 NFLS #P12476. 食物链

题意

给定一张 \(\text{DAG}\),令初始时入度为 \(0\) 的点的集合为 \(S\),出度为 \(0\) 的点的集合为 \(T\)\(q\) 次询问每次给出 \(k\) 个点删除,求删除后\(S\) 中点出发到 \(T\) 中点结束的路径数量,\(n\le2\times10^3,\sum k\le2\times10^6,k\le15,m\le2\times10^4\)

分析

新建点 \(s\)\(t\)\(s\) 向所有 \(S\) 中点连边,\(T\) 中所有点向 \(t\) 连边,则每次需要求出 \(s\)\(t\) 的路径数量

每次询问相当于有若干个点不能经过,求 \(s\)\(t\) 的路径数量

预处理点对两两间路径数量,容易 \(O(nm)\) 实现

每次询问给出的 \(k\) 个点按拓扑序排序,转化为一个常见的 \(dp\) 模型,容易 \(O(k)\) 求出 \(s\)\(t\) 的方案数

时间复杂度 \(O(nm+\sum k^2)\)

代码

NFLS #P13043. 直径

题意

给定一棵 \(n+1\) 点的树,按照某一 \(\text{bfs}\) 的顺序为 \(n\) 条边的边权依次设为 \(a_{1\sim n}\),求直径的最大值,\(n\le150\)

分析

先考虑链的情况

令链上点 \(i\) 上额外挂的子树中的总点数为 \(c_i\)

\(dp_{i,j,k}\) 表示 \(i\sim j\) 上,已经放置了 \(a_{1\sim k}\)\(i\)\(j\) 的距离的最大值

边界条件为 \(dp_{i,i,0}\gets 0\)

若向左扩展,转移为

\[dp_{i,j,k}\to dp_{i-1,j,k+1}+a_{k+1} \]

向右同理

\(a_{k+1}\) 不放在链上,则转移为

\[dp_{i,j,k}\to dp_{i,j,k+1}\quad \text{if}~ k+1\le j-i+\sum_{k=i}^j c_k \]

对于树的情况,枚举两端转化为链,时间复杂度 \(O(n^5)\) 可过,只取直径进行上述计算可过

记录两个端点下一步扩展的方向,可以做到确定性 \(O(n^3)\)

代码

参考

T3 NFLS #18085. 环形分割

比赛结果

\(100+70+50\)\(\text{rk}29\) \(\;\;\rightarrow\;\;\) \(100+70+0\)\(\text{rk}39\)

posted @ 2025-04-27 07:07  Hstry  阅读(22)  评论(0)    收藏  举报