这道题目真霸道,我的两个SAP模板都TLE,ORZ。。。
最后我找了找,测试了几个模板,考虑到模板的长度,选择了一个模板
额,我的模板又更新,那两个久经沙战的模板也淘汰了
回归到这道题,首先这道题在前面有一次比赛的时候看到过,用最大流去套他,然后就一直悲剧。。。。
要学会用最小割的思想去考虑他
给这么一组数据,你可以比较轻松看出为什么是最小割
2 1
2000 2
1 2000
1 2 100
答案就是最小2+1+100,要学会用最小割的思路去考虑问题
接着那个最小割定理就忽略不说了
下面转一个大牛的他对这个题目的证明:
这是道数据巨大的网络流的题目,但模型貌似不那么明显(或者是我太水了。。)
题目意思是:
有一些模块(modules)和一个双核处理器,一个模块可以在任意一个核上处理,每个核对应每个模块有个开销。现在有一些模块间需要数据交换,如果需要数据交换的模块在一个核上处理,则不需要额外开销,否则需要加上一个开销。现在需要完成所有模块,问最小需要多少开销。
如果没有这个额外的开销,那么每个模块只要选择开销小的那个核就行了。额外的开销给选择加上了限制。
网络流的模型:
每个模块一个节点,原点与所有模块节点连接(称为上边),边权为第一个核对应该模块的开销。所有模块节点连接到汇点(称为下边),权为第二个核对应该模块的开销。然后需要数据交换的两个模块结点之间连接双向边(两个单向边,称为中边),权为对应的那个额外开销。这样,该图的最小割中,原点和模块节点之间的边,或者模块节点与汇点之间的边至少一条在割之中。同时,如果数据交换的结点选择了不同的核,那么他们之间的中边一定也在割集中(如果不在,那么可以构造出更小的割)。如果选择了相同的核,那么模块节点之间的那条表一定在割之中模块节点之间的那条表一定不在割之中(应为是最小割)。
一个合法的情况一定对应一个割(尽管割不一定对应合法情况)
证明: 首先,合法情况要求每个模块选个核,即一个模块节点连接的上下边至少一条要选中(在割集中)。
如果选中的所有边没有构成一个割,那么一定在去掉选中的边剩下的图中还存在增光路。增光路一定是有一个上边加若干中边加一个下边组成的。由于中边没有选中,说明对应的合法情况中中变得2个顶点模块选择了同一个核。由于是若干中边连接,所以这样的增光路也不存在。
如果最小割是一个合法的情况,那么一定对应着最小的花费了。
这题数据巨大,Ek一定超时,dd的dinic也跑了4秒半