最大权闭合子图
闭合图
我们给出闭合图的定义:对于有向图中的点,其相邻的节点全部属于这个有向图,那么这个图就被称为闭合图。
也就是说这个图的终点一定是出度为0的。
最大权闭合子图
就是对于一个有向图,每个点有一个权值,权值属于实数,现在考虑选择一个闭合子图使得这个子图中的点的权值和最大。
我们尚且思考一下,不难发现我们选择一个点,那么这个点的后继节点我们全部需要选择,即它可以到达的点我们全部需要选择进来。
这样不免会选择到权值为负的边,那么我们怎么操作?
我们可以考虑网络流的做法。先考虑建立超级源点和超级汇点。
对于所有权值为正的点,我们从 向其建立一条容量为点权的边,然后对于所有点权为负的点,我们由其向 连一条容量为其点权绝对值的边。
我们之后按照原图建边,容量为无限。最终的答案就是所有正点权之和减去最大流。
这是为什么?我们考虑证明这个结论。
我们令 放出的流量为最多可以获得的权值(虽然最后不一定可以取到), 收到的流量为我们失去的价值。
我们考虑特殊的情况,如果选择了这个点以及其后继,总价值是负的,但是我们不选择就更优,但是由于我们对于正点权的点设立了最大可以流的容量,所以最后答案是大于等于 的,这个符合我们的最优决策。
我们再考虑增广的过程,我们选择一个点(显然我们选择正点权的点)反应在网络流上就是对于其进行增广,我们暂且排除上面的特殊情况,我们考虑一整个后继都可以选择,于是把所有的可以到达的负权点全部刷掉,之后我们选择其他的点增广,即使我们选择了后继重复的点,也因为我们已经把其后继的负权点全部刷掉,不会再次减少价值。
因此我们可以知道这样构造是正确的。
Q.E.D.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具