1 条题解
-
0
核心思路
1. 问题转化
设:
- (第 列的宽度)
- (第 行的高度)
则地块 的面积 = 。
居民要求:。
问题转化为:找到正整数 和 ,满足上述等式约束,并最小化: [ \left(\sum_{i=1}^n u_i\right) \times \left(\sum_{j=1}^m v_j\right) ]
2. 图论建模
将行和列看作二分图:
- 左部: 个列节点
- 右部: 个行节点
- 边:居民要求 对应连接列 和行 的边,权值为
约束 等价于: [ \frac{u_a}{1} = \frac{p}{v_b} ] 即 和 成比例关系。
3. 连通分量处理
对每个连通分量,我们可以确定节点值之间的比例关系。
代码中:
num[x] / den[x]表示节点 的相对值- 从起点 开始 BFS,利用约束 传播比例关系
例如:从 开始,若边 ,则 。
若发现矛盾(比例不一致),输出
NIE。
4. 整数化处理
对于连通分量,我们确定的是相对比例。需要找到最小的正整数解。
设分量中有:
- 列节点集合 ,行节点集合
- 已知比例:,( 为缩放因子)
则约束 自动满足。
最小化目标中,该分量的贡献为: [ \sum_{i \in X} u_i = t \cdot \sum \alpha_i ] [ \sum_{j \in Y} v_j = \frac{1}{t} \cdot \sum \beta_j ]
分量总贡献 = $\left(t \cdot \sum \alpha_i\right) \times \left(\frac{1}{t} \cdot \sum \beta_j\right) = \left(\sum \alpha_i\right) \times \left(\sum \beta_j\right)$
与 无关!
5. 关键优化
实际上,不同连通分量之间可以独立缩放。但代码通过枚举因子 来处理可能的整数约束,确保所有 为整数。
最终问题转化为:
- 每个连通分量有固定贡献 到总宽度和总高度
- 总宽度 ,总高度
- 总面积
通过排序和贪心调整分量顺序,找到最小面积。
重要公式
-
面积约束: [ u_i \times v_j = p_{ij} ]
-
比例传播: [ \frac{u_a}{u_{a'}} = \frac{p_{ab}}{p_{a'b}} \cdot \frac{v_b}{v_b} = \frac{p_{ab}}{p_{a'b}} ]
-
分量贡献: [ \text{宽度贡献} = \sum_{i \in \text{cols}} u_i,\quad \text{高度贡献} = \sum_{j \in \text{rows}} v_j ]
-
总面积: [ \text{Area} = \left(\sum_{\text{分量}} S_x\right) \times \left(\sum_{\text{分量}} S_y\right) ]
算法流程
- 建图:行列二分图,边权为面积要求
- 连通分量:BFS 确定比例关系,检查一致性
- 整数化解:计算每个分量的 贡献
- 组合优化:通过排序调整使 最小
- 输出:最小总面积
复杂度
- 建图:
- BFS:
- 排序:
- 总体: 或稍高,可接受
- 1
信息
- ID
- 3978
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 5
- 已通过
- 1
- 上传者