DOJ logoDOJ
题目
最近添加的题目收藏的题目Workbooks
分类DLC比赛小组团队讨论区
排名
解题数量排行榜连续解题排名DOJ Power 排行榜
评测状态
征题登录注册
DOJ logoDOJ

支持 OI 子任务计分、Elo 等级分和 Discord 账号绑定的社区在线评测系统。

题目
题目列表分类
社区
比赛排名讨论区公告举办外部比赛指南
账号
登录注册评测状态
政策
服务条款DLC 使用规则隐私政策API 文档语言运行环境比赛排名奖励评级与表现
© 2026 DOJ
保留所有权利
题解

分发百奇 2

返回题目

题解

子任务1 设空格数为KKK,枚举2K2^K2K种分配并检查每名学生是否得到两种口味。时间复杂度为O(2KNM)O(2^K NM)O(2KNM)。

完整解法 为每行和每列建立一个顶点;每个空格(i,j)(i,j)(i,j)对应连接行iii与列jjj的一条边。横向盒子对应将边指向行顶点,纵向盒子对应指向列顶点。将含有学生的行、列对应的顶点称为必需顶点。目标等价于让所有必需顶点的入度为正。

在树连通分量中,边数比顶点数少一。若所有顶点都必需,则不可能满足要求。否则选一个非必需顶点作为根,将树边全部指向子节点,根以外的每个顶点都有入边。

若连通分量有环,取一棵生成树及一条非树边(r,c)(r,c)(r,c)。以rrr为根,将树边指向子节点,并将选定的非树边指向rrr。这样所有顶点都有入边,其余边可任意定向。孤立顶点也适用同一树分量判定。

因此,当且仅当存在全部顶点都必需的树分量时无解。用并查集建立生成森林并收集非树边,选根后迭代遍历构造答案。时间复杂度为O(NMα(N+M))O(NM\alpha(N+M))O(NMα(N+M)),空间复杂度为O(NM+N+M)O(NM+N+M)O(NM+N+M)。

Solution written by GPT6.1