牧师约翰最忙碌的一天
解释一下具体方案的选择
我们来思考一下如果给了我们最终方案,我们应该如何选择。产生矛盾当且仅当放在同一水平线的对应的两个点同时选择。也就是说我们的方案对于每对放在同一水平线上对应的两个点应该是选择且之选择一个
那么来看蓝书怎么搞的
首先是第一种方法。如果我们按照拓扑正序去做,有可能会导致我们同时选择放在同一水平线的对应的两个点。设
然后来看看第二种方法,其实也就是利用tarjan执行完之后,SCC的逆序是一个拓扑序,但我们需要证明原图中拓扑序的逆序列是反图的拓扑序(也就是原图的拓扑逆序)
其实稍微想一下就知道,我们倒着执行原图的拓扑序,假设准备执行当前节点时,我们来想一下此时序列的意义
原图的拓扑序中,当前节点的后面的节点是在当前节点之后删除的,也就是说当前节点在原图的出边的终点一定排在原图拓扑序列中当前节点的后面,所以在反图上,我们倒着执行到当前节点的时候,当前节点在反图上入边的起点(也就是原图上出边的终点)一定都执行完了,所以当前节点在反图上的度数一定是
然后我们从小到大遍历val[i]=c[i]>c[opp[i]]
(可以想一下为什么)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构