ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[提高组集训2021] 粉刷匠

2021-06-26 17:00:52  阅读:187  来源: 互联网

标签:图论 那么 tt 决策 粉刷 整行 2021 考虑 集训


一、题目

题目描述

\(zxy\) 要刷题,现在有一片 \(n\times m\) 的矩阵题库,每个格子对应一道题,他想把一些题刷 \(\tt Wa\),另一些题刷 \(\tt Tle\),每次可以选一整行或者一整列刷题。初始时每道题都没有提交,提交记录会覆盖,问达到目标刷题状态的最小步数,无解输出 \(-1\)

\(n,m\leq3000\)

解法1

考虑图论,每行每列的点拆成刷红或者刷蓝,代表选取的不同方案,我们把决策建在了点上,考虑把限制建在边上。也就是如果 \((i,j)\) 是蓝色,那么点 \(row(i,R)\) 连向 \(col(j,B)\),点 \(col(j,R)\) 连向 \(row(i,B)\),这里的边代表刷了起点就必须刷终点,\((i,j)\) 为红色的情况同理。

无解的情况是出现环,如果没有无解,考虑如果刷一个点那么管辖范围内的点都要刷,可以按照拓扑序来刷,那么每个点最多刷一次就足以解决限制。这说明了答案的上界是 \(n+m\)(如果是某个点的刷红连向了刷蓝,那么一定选刷蓝,因为刷红是完全无效的!),现在要刷满行或者刷满列才行,考试时我在图上决策,发现根本做不动!

这时候要回到原图了!考虑刷满行的情况,每行都要刷红或者刷蓝,如果某个列和行决策颜色对应相同,那么就不需要染色了,否则一定需要染色。那么我们把每个列 \(\tt hash\) 一下,找到数量最大的列的种类,设数量是 \(x\),可以通过设置行的决策来让这些列都不选,那么答案就是 \(n+m-x\),并且根据图论我们知道这样做合法且最优。对于刷满列的情况同理,把行 \(\tt hash\) 一下即可,时间复杂度 \(O(nm)\)

解法2

最后一步刷的一定是整行整列颜色相同的,可以根据这个性质去倒推,留给读者思考吧

总结

复杂的问题可以考虑图论,但是不要被图所困住了,原问题对于图论是及其重要的。

标签:图论,那么,tt,决策,粉刷,整行,2021,考虑,集训
来源: https://www.cnblogs.com/C202044zxy/p/14934710.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有