1 条题解

  • 0
    @ 2025-10-22 20:26:24

    问题理解

    我们有:

    • 一个 nn 个点的 DAG(有向无环图),点 nn 是部队起点,点 11n1n_1 是目标出入口
    • 每条边有时间 tt安全系数 ss
    • 一个二分图结构:m1m_1 个空腔,每个连接一个奇数编号出入口和一个偶数编号出入口
    • 派部队到某个出入口可以探索所有与之相连的空腔
    • 单支部队危险性 = 路径总时间 / 路径安全系数和
    • 总危险性 = 各部队危险性之和
    • 目标:覆盖所有空腔的前提下最小化总危险性

    关键观察

    1. 问题结构分析

    • 空腔形成二分图:左部是奇数出入口,右部是偶数出入口
    • 覆盖空腔 = 选择一些出入口,使得每条边(空腔)至少有一个端点被选中
    • 这是典型的二分图点覆盖问题

    2. 危险性计算的特殊性

    危险性定义: [ \text{危险性} = \frac{\text{总时间}}{\text{安全系数和}} = \frac{\sum t_i}{\sum s_i} ] 这是一个分式线性函数,需要用到分数规划技巧。

    3. 部队派遣独立性

    每个出入口可以独立派遣部队,且部队从同一起点 nn 出发。


    算法框架

    步骤1:分数规划转化

    xix_i 表示是否派遣部队到出入口 iicic_i 是到出入口 ii 的最小危险性。

    原问题: [ \min \sum_{i=1}^{n_1} c_i x_i \quad \text{s.t. } x \text{ 是二分图点覆盖} ]

    cic_i 本身也是分式:ci=TiSic_i = \frac{T_i}{S_i},其中 TiT_i 是到 ii 的最短时间,SiS_i 是最大安全系数和。

    分数规划思路:二分答案 λλ,判断是否存在方案使得: [ \sum \frac{T_i}{S_i} x_i \leq λ ] 等价于: [ \sum (T_i - λ S_i) x_i \leq 0 ]

    步骤2:计算单点代价

    对每个出入口 ii,我们需要找到从 nnii 的路径,最小化 TλST - λS

    由于图是 DAG,可以用 DP 或 BFS 计算:

    • 状态:dp[u]dp[u] 表示从 nnuu 的最小 TλST - λS
    • 转移:dp[v]=min(dp[v],dp[u]+tλs)dp[v] = \min(dp[v], dp[u] + t - λs)

    对每个 λλ,预处理所有 dp[i]dp[i]1in11 \leq i \leq n_1)。

    步骤3:二分图点覆盖

    现在问题转化为:选择一些出入口,覆盖所有空腔,且 wixi0\sum w_i x_i \leq 0,其中 wi=dp[i]w_i = dp[i]

    网络流建模

    • 源点 SS 连所有奇数出入口,容量 wiw_i(若 wi>0w_i > 0)或 (若 wi0w_i \leq 0
    • 所有偶数出入口连汇点 TT,容量 wiw_i(若 wi>0w_i > 0)或 (若 wi0w_i \leq 0
    • 每个空腔 (u,v)(u,v)uu(奇数)向 vv(偶数)连容量 的边

    最小割定理:该网络的最小割对应最小点权和覆盖。

    步骤4:二分判断

    对给定的 λλ

    • 计算所有 wi=dp[i]w_i = dp[i]
    • 建网络流图,求最小割
    • 如果最小割值 0\leq 0,则 λλ 可行,否则不可行

    二分 λλ 直到精度足够。


    算法流程

    1. 分数规划:二分危险性 λλ
    2. 单源最短路:在 DAG 上 DP 计算每个出入口的 TλST - λS
    3. 网络流判定:建图求最小割,判断 λλ 是否可行
    4. 输出:找到最小的可行 λλ,保留一位小数

    复杂度分析

    • 二分次数O(log(范围精度))O(\log(\frac{\text{范围}}{\text{精度}})),约 O(log(105))20O(\log(10^5)) \approx 20
    • DP 计算:每次 O(n+m)O(n + m)n700,m105n \leq 700, m \leq 10^5,可行
    • 网络流:二分图,n1160n_1 \leq 160,使用 Dinic 复杂度 O(n12m1)O(n_1^2 \cdot m_1)m140000m_1 \leq 40000,可行

    样例分析

    样例中:

    • n=5,m=5n=5, m=5,起点是 5
    • 4 个空腔:(1,2),(1,4),(3,2),(3,4)(1,2), (1,4), (3,2), (3,4)
    • 需要覆盖所有空腔,最优方案是选择出入口 1 和 2
    • 计算得到最小危险性 17.0

    特殊情况处理

    • 无解情况:如果存在空腔无法被任何部队覆盖(即两个端点都不可达),输出 -1
    • 精度处理:保留一位小数,注意四舍五入
    • 无穷大处理:不可达的出入口代价设为

    总结

    这道题的核心是:

    1. 分数规划:将分式目标转化为线性判定问题
    2. DAG 上 DP:高效计算单点代价
    3. 网络流建模:将点覆盖问题转化为最小割
    4. 二分答案:在实数域上寻找最优解

    通过将原问题分解为这几个子问题,可以高效求解这个复杂的优化问题。

    • 1

    信息

    ID
    3825
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者