1 条题解
-
0
「OOI 2016 Day 1」表格压缩 题解
问题分析
我们需要将原表格中的数值重新映射到新的正整数,使得:
- 同一行内相对大小关系保持不变
- 同一列内相对大小关系保持不变
- 映射后的最大值尽可能小
关键观察:
- 如果两个单元格 和 不在同一行或同一列,它们可以映射到相同的值
- 如果 ,则
- 如果 ,则
算法思路
核心思想:图论建模
将每个单元格 看作图中的一个节点,建立偏序关系:
-
行约束:对于任意 , :
- 如果 ,建立有向边
- 如果 ,合并节点 和
-
列约束:对于任意 , :
- 如果 ,建立有向边
- 如果 ,合并节点 和
-
等价类合并:使用并查集处理相等关系,将必须相等的单元格合并为同一个节点
-
拓扑排序赋值:在得到的 DAG 上进行拓扑排序,每个节点的值
具体步骤
1. 预处理
- 将 表格展平为一维数组,索引函数:
- 初始化并查集,每个单元格独立为一个集合
2. 等价类合并
- 按行处理:对每行 ,将值 相同的所有单元格 合并到同一等价类
- 按列处理:对每列 ,将值 相同的所有单元格 合并到同一等价类
- 最终得到等价类集合
3. 建立约束图
- 行约束边:对每行排序,在相邻的不同值对应的等价类间建立有向边
- 列约束边:对每列排序,在相邻的不同值对应的等价类间建立有向边
- 计算每个等价类的入度
4. 拓扑排序与动态规划
- 初始化队列 包含所有入度为 的等价类,设
- 当 非空时:
- 取出队首 ,遍历所有出边
- 更新
- 减 ,若为 则入队
5. 输出结果
对于每个单元格 ,输出其所属等价类 的 值
复杂度分析
时间复杂度
- 排序:
- 并查集:
- 建图与拓扑排序:
- 总复杂度:
空间复杂度
- 存储图结构:
- 并查集与DP数组:
- 总空间:
- 1
信息
- ID
- 4960
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者