[SHOI2007]善意的投票
题意:
个小朋友投票睡不睡午觉,每个人都有自己的想法,有 对朋友关系,如果朋友之间投票不一样则为发生冲突,但每个人可以投与自己想法相反的票,但改变想法也算一个冲突,怎样使得冲突最小,输出最小冲突数量。
由数据范围容易联想到网络流做法,但就是不知道怎么建图。
将所有的冲突连成边,比如 想睡觉, 不想,那么 表示 与 冲突,想要接受这个冲突就要花费 的代价。
如果割掉所有的冲突那么就相当于考虑完所有的代价,所以建完图后跑个最小割。
具体建图的话:
1.将所有想睡觉的连向源点;
2.将所有不想睡觉的连向汇点;
3.将所有朋友关系连上边,这里注意睡觉的向不睡觉的连单向边,意见相同的要互相连双向边。(然而为了方便起见我们可以都连双向边,不会有影响)
网络流建出来的图一般都很玄学,但我们可以举几个简单的例子来思考每条边的意义:
如上图, 想睡觉, 和 不想,如果意见都保持不变相当于割掉 连向 的边,代价为 。但是如果我们只让 改变为不想睡觉,相当于割掉 连向 的边,代价更小为 。所以,割掉睡觉向不睡觉的边相当于保持冲突,割掉 连向睡觉的边或不睡觉连向 的边相当于改变想法。
如上图,如果像刚才那样改变 的想法,就是割掉了 连 的边,但是通过 和 同样可以和 流,因为改变了 的想法后与 和 又产生了新的冲突,我们需要继续割掉 连向 和 的边,就是将 的想法都改变,显然不如让 和 冲突更优。所以,相同想法的点建边是为了保证具有相同的想法,如果有一边改变的话这条边也需要被割掉。
理解的差不多,剩下的就是板子了 :
__EOF__

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具