讲师:PinkRabbit 时间:20210701 地点:福建师范大学附属中学
有 座城市,第 座城市生产了 单位货物,最多能卖出去 单位货物。
对于 ,城市 有一条单向运输线路通向 。
所有运输线路的容量都为 单位货物。不能反向运输,但是货物可以经过任意多个运输线路。
请求出总共最多能卖出去多少单位货物。
数据范围:n≤10^4。时间限制:2 s。Bonus:n≤10^6。
首先考虑网络流建模,模型显然;但是边数是 的且难以优化。
这时一个惊世骇俗的步骤登场了——由最大流等于最小割,然后用动态规划来优化!
根据最小割的第二种定义:
将原图划分为两个点集,使得他们之间的连边边权和最小。
所以,一个点要么割掉它向 的连边,要么割掉向 的连边;且如果一个点割掉了 ,那么它后面的所有点都必须把 割掉或者是要切断中层的所有连边。
根据第二定义也可以很快地得出转移方程: 表示 个连向 、 个连向 的最小割,有
于是这个及其震撼人心的 DP
就诞生了!
能不能再优化?设 为与 连接的点集,有:
提取一下:
枚举 并且排序一下即可做到 。
给定两个长度为 的正整数序列 和 ,以及一个正整数 。
请选出恰好 对数 满足 且 且 。
最小化 。
数据范围:。时间限制:10 s。
这题莫不是一个模拟费用流板子?但是 的限制怎么办?wqs
二分即可解决。
模拟费用流具体流程如下:从左到右扫描,依次加入 ,并在堆中查找最大的与 匹配;为了反悔,可以把 当作一个 加入堆中。
如何去掉一个 呢?考虑更加暴力地模拟费用流,发现复杂度瓶颈在于最短路,用线段树来维护最短路即可。
有一张 个点 条无向边的图,每条边的长度为 ,但是第 条边限制只能在时间段 内通过(即从一端点出发时必须在时刻 内),而且是禁止在一个点处停留的,也就是到达了一个点就必须选择一条出边继续走,经过一条边必须恰好花费 1 的时间,并且必须到达另一个端点。
求从 到 的最短路。
数据范围:。时间限制: s。
考虑一条边可以反复走,且反复走时奇偶位是分开的,所以考虑按照奇偶将所有点拆点,每条边也拆成 条有向边。
先讲做法:对于每个点记录 表示点最后一次可达的时间;将所有边加入堆中(按照 ),依次取出,如果 ,就拿 更新 ;否则将其加入这条边的暂存桶里边;每次遇到可行边时也更新 的桶,将 重新加入堆中;可达终点时输出 。
为什么是对的呢?因为 是递增的,所以当 时, 时刻一定是可达的;使用暂存桶的目的是保证这条新的边也是在正确的时候取出,不会影响前面的性质;由于这个性质,输出 也就很显然了。
存在一张 个点的有向图,记 表示点 能否直接或间接到达点 。
你不知道这张图的边集,只给定了一个矩阵 。
其中 ()只能为字符 之一,而 均为字符
-
。对于两点 ():
1.如果 为
A
,则表示 。2.如果 为
O
,则表示 。3.如果 为
X
,则表示 。请求出满足条件的有向图的最小可能边数,或判定这样的图不存在。
数据范围:。时间限制: s。
考虑先将以 A
连接的 进行缩点,如果同一个强连通分量内存在 X
就矛盾无解。
注意到,若一个强连通分量大小大于等于二,那么它会多产生一的代价;如果大小等于一,那么没有额外代价;那么我们只要尝试将可以合并的尽可能合并。
因为大小为一的没啥关系,因此直接去掉;剩下的连通块数量 ,而 是可以接受的!
因此我们考虑指数级做法,设 ,表示 是否可以缩在一起(内部是否没有 X
)。
我们的任务是找到最小的 使 ,其中乘法为子集卷积,复杂度 ,不可接受。
这时我们发现,即使改成或卷积,答案不变!复杂度 ,不可接受。
这时我们发现,复杂度的瓶颈不在于点积,而在于每次的 iFWT
!由于我们只需要求一个点的值,因此我们直接 算这个点的点值。复杂度 ,可接受。
计算单点点值可以参考 FWT
的右乘矩阵 ,得 。
这时我来吊打标算了,直接随机化,随机一个排列,依次加入,每次争取加入最前面得强连通分量,直接 草过。
有 个游戏,每个游戏有收益 ,成功率 。
每秒可以玩一个游戏,如果成功了则获得收益,并且获得一次可以升级游戏的机会。
每个游戏有升级后的收益 ()。
问玩 秒游戏可以获得的期望收益的最大值。输出浮点数即可。
数据范围:,,,。时间限制:3 s。
显然,第一次获得升级机会时,我一定要升级一个 最大得,然后一直点那个。
设 表示剩下 时间、没有升级时的最大期望收入,则:
变形一下:
这是一个一次函数!我们求出由每个 组成的上凸壳( 看作常数,直接忽略)。
对于凸壳上的每一段,均二分并矩阵快速幂加速找到分界点;当然利用倍增可以优化到一个 。
有一个 行 列的棋盘,每个格子里有整数 。
一只乌龟从 走到 ,只能往下走和往右走。定义路径权值为路径上经过的数值之和,乌龟想要最大化这个权值。
你可以对棋盘上的数字重新排列,最小化乌龟可能获得的最大权值。
请构造达到这个最小值的方案。
数据范围:,。时间限制:5 s。
性质 1:第一行递增、第二行递减,证明使用交换法,显然不劣。
性质 2:乌龟要么走第一行,要么走第二行,证明考虑权值和的差分数组,即可证明是下凸的。
于是就可以愉快地背包拉!
给定一个长度为 的数组 ,保证 互不相同。
对于数组中每一对顺序对( 且 ),在 之间连一条无向边。
求图中连通块个数。
你需要支持 次修改 ,保证每次修改后 互不相同。
数据范围:,。时间限制:8 s。
给定 个正整数 ,求 。
数据范围:。时间限制:1 s。
考虑枚举 ,然后找到 中 最大的。
考虑从大到小加入一个栈中,如果存在栈中元素与当前元素互质,我们可以把这个元素及其之后所有元素弹出,因为显然没用了。
问题就转化为维护栈中是否有元素与当前元素互质,有:
考虑如何维护 ;我们暴力枚举因数,因为可以去重,所以复杂度是 的。
总复杂度是两个 的,能不能再优化?我们把每个 的所有因数都加入 中,答案显然不变;只需找到 中 最大值即可。因为 必然是可以拆成这样两部分。