2024 Oct

Question 1. [Usaco2004 Dec] Fence Obstacle Course

给定 \(n\) 个栅栏,第 \(i\) 个栅栏的范围是 \(([L_i,R_i],i)\),初始 Bessie 位于 \((S,n+1)\) 处,不能从中间跨过栅栏,但是端点处可以,问到达 \((0,0)\) 的横向移动距离最小值。

\(n\leq 5\times 10^4, -10^5\leq L_i < R_i\leq 10^5, -10^5\leq S\leq 10^5\)


想一下就会发现这不是什么维护类问题,例如维护到达某一行某个特定列坐标的最短距离,考虑 DP。

\(f_{i,0/1}\) 表示到达第 \(i\) 个栅栏左/右端点的最小横向移动距离。

然后就可以 \(\mathcal{O}(n^2)\) 转移,而显然一个端点往下走一定是能往下就往下,线段树预处理 \(p_i,q_i\) 表示左右端点不断下落后第一个阻挡的栅栏的编号。

时间复杂度为 \(\mathcal{O}(n\log_2 n)\)

Question 2. [ZJOI2010] 基站选址

\(n\) 个村庄在一条路上顺次排列,第 \(i\) 个村庄的坐标是 \(D_i\),在第 \(i\) 个村庄建立基站的代价是 \(C_i\),你仅可以在村庄建立基站,第 \(i\) 个村庄有信号当且仅当距离不超过 \(S_i\) 的位置有基站,否则你需要赔偿 \(W_i\) 元。

你最多建立 \(k\) 个基站,试求出最小花费。

\(k\leq \min(n,100), n\leq 2\times 10^4, D_i < D_{i+1}\)


比较难以 DP,毕竟有这么多的参数,而且信号感应范围左边、右边均可。

\(f_{i,j}\) 表示在第 \(i\) 个村庄建立第 \(j\) 个基站,且不管后面的基站如何,则转移显然是 \(f_{i,j} = \underset{k < i}{\min} f_{k,j-1} + c(k,i) + C_i\) 形式,其中 \(j\) 可以省略,转移 \(k\) 次即可,时间复杂度为 \(\mathcal{O}(n^2k)\)

问题在于这个 \(c(k,i)\) 形式,考虑如何进行维护。

我们求出对于每一个村庄而言,其感应范围内最左边、最右边的村庄,记为 \(L_i,R_i\),考虑如果当前位置是 \(p\),将要进行 \(p+1\) 的转移,对于所有 \(R_i = p\) 的村庄,如果上一次建设的基站在 \([1,L_i)\) 则额外增加 \(W_i\) 的代价,这一点用线段树区间加+区间最小值即可维护。

最后,我们可以向最后添加一个坐标极大、代价为 \(0\) 的村庄,并将 \(k\gets k+1\),这样我们会钦定最后一个必选,从而忽视掉我们的状态所带来的不足之处。

时间复杂度为 \(\mathcal{O}(nk\log_2 n)\)

Question 3. [CF EDU171] E. Best Subsequence

给定 \(n\) 个非负整数 \(a_i\),从中选出一些数字,最大化选出的数字数量减去选出的数字的按位或的 \(\text{popcount}\) 的结果。

\(T\leq 100, n\leq 100, a_i < 2^{60}\)


该问题等价于有若干个集合 \(S_i\),最大化选出的集合数量减去集合的并集大小。

考察最大权闭合子图模型,先钦定选出所有集合获得收益 \(n\),并按照如下方式建图:

  • 超源 \(S\) 向每个权值连边,容量为 \(1\),割此边表示选择这个数字。
  • 每个集合向超汇 \(T\) 连边,容量为 \(1\),割此边表示抛弃这个集合。
  • 每个权值向拥有这个权值的集合连边,容量为正无穷,描述一条限制,要求要么选择对应的数字,要么抛弃对应的集合。

跑出最小割,可以求出满足题意需要扣除的最小代价。

Question 4. 「JOISC 2018 Day 3」Bitaro's Party

给定一张 DAG,保证 \(1\sim n\) 是拓扑序,共 \(n\) 个点 \(m\) 条边,有 \(q\) 个询问,每个询问指定一些点 \(P_1,\cdots,P_{l_i}\),询问所有非指定的点且能够到达该点的所有点中,到达该点的最长路。

\(n,q, \sum l_i \leq 10^5, m\leq 2\times 10^5\)


考虑一种显然的暴力:每次 DP 求最长路,时间复杂度为单轮 \(\mathcal{O}(n+m)\)

假设每次 \(l_i\leq 1\),我们能否做到询问 \(\mathcal{O}(1)\) 解决?

答案是可以,我们可以对每个点求出最远的 \(2\) 个点,然后就可以单组询问 \(\mathcal{O}(1)\) 做了。

考虑综合一下,设立阈值 \(B\),对于 \(l_i\ge B\) 的我们每次暴力做,对于 \(l_i < B\) 的我们对每个点求出最远的 \(B\) 个点。

时间复杂度?

  • 预处理:时间复杂度为 \(\mathcal{O}(mB)\)
  • 询问,设 \(S = \sum l_i\)
    • 对于 \(l_i \ge B\) 的,时间复杂度为 \(\mathcal{O}(\dfrac{(n+m)S}{B})\)
    • 对于 \(l_i < B\) 的,时间复杂度为 \(\mathcal{O}(B)\)

直接设 \(B = \sqrt{\dfrac{S}{2}}\) 即可。

ARC186

待补充。

JOI 2018 Final

LOJ2347 寒冬暖炉

\(N\) 个客人将会依次来访,第 \(i\) 个客人的到达时间是 \(T_i\),离开时间是 \(T_i + 1\)

Suzune 家中有一个暖炉,而 Kaho 在家中翻出了 \(K\) 根火柴。

当有客人在家中时,暖炉必须保持开启,其余时刻你可以选择熄灭暖炉,每次点燃暖炉需要花费 \(1\) 根火柴。

请问暖炉保持开启的总时长最短是多少?

\(1\leq K\leq N\leq 10^5, T_i\leq 10^9, T_i < T_{i+1}\)


考察客人来访之间的空隙时间 \([T_i+1,T_{i+1})\),这些空隙时间可以选择熄灭暖炉,在 \(N-1\) 个空隙时间中可以选择 \(K-1\) 个空隙时间熄灭(因为第一个客人来时必须花费 \(1\) 根火柴点暖炉)。

贪心的,选择 \(K-1\) 个最长的空隙时间即可,在 \([T_1,T_N+1)\) 的总时间中减去这些空隙时间的总和,即可求得最短开启总时长。

时间复杂度为 \(\mathcal{O}(N\log_2 N)\)

LOJ2348 美术展览

\(N\) 件美术品,第 \(i\) 件美术品的尺寸是 \(A_i\),美观度是 \(B_i\),作为美术馆展览负责人的你可以自由选择一些美术品进行展览。

令选出展览的美术品的美观度之和为 \(S\),尺寸的最大值分别为 \(A_{\max},A_{\min}\),试求 \(S - (A_{\max} - A_{\min})\) 的最大可能值。

\(N\leq 5\times 10^5, 1\leq B_i\leq 10^9, 1\leq A_i\leq 10^{15}\)


首先按照 \(A\) 升序排序所有美术品,记选出的最小尺寸与最大尺寸的美术品在排序后分别位于第 \(p\) 个和第 \(q\) 个。

那么,将排序后的 \([p+1,q-1]\) 内的美术品全部选中显然不劣,因为此时只会增加 \(S\)

不妨记排序后的美观度前缀和为 \(C\),则选择 \(p,q\) 的答案就会是 \(B_q - B_{p-1} - (A_q - A_p)\),枚举即可做到时间复杂度 \(\mathcal{O}(N^2)\)

拆个括号可以得到 \((B_q - A_q) - (B_{p-1} - A_p)\),扫描 \(q\),记 \(B_{p-1} - A_p\) 的前缀最小值,更新答案即可。

时间复杂度为 \(\mathcal{O}(N\log_2 N)\)

LOJ2349 团子制作

\(N\times M\) 个 Dango 被排布成 \(N\)\(M\) 列,第 \(i\) 行第 \(j\) 列的 Dango 的颜色为 \(C_{i,j}\),仅可能为红色、绿色、白色中的一种。

作为 Best Dango Maker 的你将会使用这些 Dango 做成 Dango 串,每一串 Dango 可以选择从左到右的连续三个 Dango,或者从上到下的连续三个 Dango,并且按照所述顺序必须是红色、绿色、白色顺次排列。

每个 Dango 最多只能被加入至一串 Dango,请问你最多能够做出多少个 Dango 串?

\(N,M\leq 3\times 10^3\)


首先红色和白色的影响是后两列或前两列,而绿色的影响是前后左右各一列,更好分析,接下来按照绿色进行分析。

一个绿色 Dango 如果被横向选中,那么,其左下方一个绿色 Dango 不能竖向选中,其右上方一个绿色 Dango 同理。

也就是说,绿色 Dango 之间的阻碍关系是右上-左下方向的,每一条这样的线分别 DP 即可,将这样在同一条线上的 Dango 按照顺序提取出来,假设有 \(n\) 个。

\(f_{i,0/1/2}\) 分别表示考虑到第 \(i\) 个,当前这一个是不选/横向选中/竖向选中,那么转移为:

\[\begin{aligned} f_{i,0} &= \max(\{f_{i-1,0},f_{i-1,1},f_{i-1,2}\}) \\ f_{i,1} &= \max(f_{i-1,0},f_{i-1,1}) + r(i) \\ f_{i,2} &= \max(f_{i-1,0},f_{i-1,2}) + c(i) \\ \end{aligned} \]

其中 \(r(i),c(i)\) 分别表示该 Dango 能否横向选中/竖向选中。

时间复杂度为 \(\mathcal{O}(NM)\)

LOJ2350 月票购买

给定一张城际轨道交通网络 \(G\),共计 \(N\) 个城市,\(M\) 条铁路,每一条铁路有费用 \(C_i\),给出两个点对 \((S,T),(U,V)\)

Kaho 有两趟频繁的交通需求:\(S\to T, U\to V\),为了去和 Suzune 一起玩,以及去游乐场 Happy,她将会购买一张 \(S\to T\) 的月票,这可以让一条指定的 \(S\to T\) 的最小费用线路的所有铁路的费用变为 \(0\),其余不变。

现在你需要帮助 Kaho 选择合适的最短线路,以最小化 \(U\to V\) 的最小乘车费用。

\(N\leq 10^5, M\leq 2\times 10^5, (S,T)\ne (U,V)\)


假设 \(U\to V\) 的最短路是 \(U\to A\to B\to C\to D\to V\) 的形式,且 \(A\to B, C\to D\)\(S\to T\) 的某最短路上而 \(B\to C\) 不在,那么显然是不可能的,因为 \(S\to T\) 也可以同样的更改 \(B\to C\) 段使得费用更小。

所以一定是 \(U\to A\to B\to V\) 的形式,且 \(A\to B\)\(S\to T\) 的最短路上。

其次,在 \(S\to T\) 的所有可行最短路上的所有边构成 DAG,设 \(U\to x\) 的最短路是 \(v_1(x)\),而 \(x\to V\) 的最短路是 \(v_2(x)\),也就是要选出 DAG 上一对可达点对 \(x,y\) 最小化 \(v_1(x) + v_2(y)\),这可以简单 DP,设 \(f_v\) 表示 \(v\) 所有可达点的 \(v_2\) 的最小值,转移考虑枚举直接后继点转移。

当然,\(U\to V\) 的方向可能是 \(T\to S\) 方向,做两遍即可。

如何判断 \((u,v,w)\) 在不在 \(S\to T\) 的最短路上呢?判断 \(dis(S,u) + w + dis(v,T) = dis(S,T)\) 是否成立即可。

时间复杂度为 \(\mathcal{O}(M\log_2 M + N)\)

LOJ2351 毒蛇越狱

\(2^L\) 条毒蛇,编号分别为 \(0\sim 2^L - 1\),在二进制下补全到 \(L\) 位,从高位往低位的第 \(i\) 位,若为 \(1\) 则表示第 \(i\) 段是红色,否则为蓝色,编号为 \(i\) 的毒蛇的毒性是 \(A_i\)

现在有 \(Q\) 个询问,每个询问给出一个字符串 \(T\),对于每一段,可能要求是红色/蓝色/不确定,对所有满足条件的毒蛇,求其毒性的和。

\(L\leq 20, Q\leq 10^6\),内存限制为 \(\texttt{64MiB}\)


设要求为蓝色的段数为 \(a\),要求为红色的段数为 \(b\),要求为不确定的段数为 \(c\),考察三个做法:

  • 枚举每一个不确定的段填入的数字 \(0/1\),时间复杂度为 \(\mathcal{O}(2^cc)\)
  • 枚举每一个为 \(0\) 的位,将其换成 \(1\) 或不确定,此时可以用高维后缀和预处理求出可能的状态的毒性的总和,然后容斥出答案,时间复杂度为 \(\mathcal{O}(2^aa)\)
  • 枚举每一个为 \(1\) 的位,将其换成 \(0\) 或不确定,此时可以用高维前缀和预处理求出可能的状态的毒性的总和,然后容斥出答案,时间复杂度为 \(\mathcal{O}(2^bb)\)

具体如何容斥,举个例子,设 \(4\) 位要求分别是 \(\texttt{00?1}\),考虑枚举所有 \(0\) 的更改状况:\(\texttt{???1},\texttt{?1?1},\texttt{1??1},\texttt{11?1}\),其所对应的总和分别包括:

  • \(v(\texttt{???1}) = v(\texttt{00?1}) + v(\texttt{01?1}) + v(\texttt{10?1}) + v(\texttt{11?1})\)
  • \(v(\texttt{?1?1}) = v(\texttt{01?1}) + v(\texttt{11?1})\)
  • \(v(\texttt{1??1}) = v(\texttt{10?1}) + v(\texttt{11?1})\)
  • \(v(\texttt{11?1}) = v(\texttt{11?1})\)

上述式子依次编号为 \(1,2,3,4\),则 \(v(\texttt{00?1})\) 可以等价于 \(1\) 式减 \(2\) 式减 \(3\) 式加 \(4\) 式,类比可求得其余情况。

由于 \(a+b+c = L\),故 \(T = \min(\{a,b,c\}) = \Big\lfloor{\dfrac{L}{3}}\Big\rfloor\leq 6\),时间复杂度为 \(\mathcal{O}(Q2^T+ 2^LL)\),空间复杂度为 \(\mathcal{O}(2^L)\)

posted @ 2024-10-08 11:51  ydzr00000  阅读(9)  评论(0编辑  收藏  举报