摘要:
HDU_3605 之所以写这个题目是因为偶然看到了用匈牙利算法做二分图多重匹配这么个东西,看完之后发现只是在原有求二分图最大匹配的基础上对匈牙利算法做了一点拓展,代码还是很好写的,而且效率也很不错。 如果用网络流做的话,这么多点是承受不了的,但由于M很小,可以将N个点适应各个星球的M个数字综合起来看成一个二进制数,这样就能把N分成2^M类,这样图的顶点的数量就降下来了,于是再用网络流求解就OK了。不过即便这么费事地优化了原图,和裸着用匈牙利算法写的代码相比效率也才快100ms左右,可见匈牙利算法还是很高效的。 至于那些100ms左右的程序应该是用了读入优化以及各种其他的优化吧,这个题用读... 阅读全文
摘要:
POJ_3084 这个题目的题意感觉好费解,最后还是连蒙带猜才搞懂的。首先题目中说的门大概是这样的:可以是开着的也可以是锁着的,如果是锁着的也可以从门的某一侧打开,但是另一侧就没法打开。图中每个CP都对应了一个门,CP所在的房间就是能打开锁着的门的那一侧。 实际上我们就是要关闭一些门,使得从入侵者的位置开始(不妨标记为S)出发,不能够到达要保护的房间(不妨标记为T)。对于任意一扇门来讲,如果从能打开它的那一侧走的话,显然锁上也是白搭的,而如果从另一侧走的话,那么锁和不锁还是有区别的。于是不妨将一扇门看成两条边,一条是从能打开它的那一侧走到另一侧的边,容量设为INF,另一条是反向的,容量设为.. 阅读全文
摘要:
POJ_2987 对于这个题目的第一问,无论是放大边权的做法还是dfs找和S连通的做法,限于个人水平有限,暂时对两个做法都没有证明出来是对的,但个人更倾向于第二种方式。 在Edelweiss的《网络流建模汇总》中有提到过如何判断最小割是否唯一。之所以出现最小割不唯一,一部分是源于类似这样的情况:S到1有条容量为1的边,1到T也有条容量为1的边,做完最小割之后两条边的残量都变成0了,也就是说都可以看作是割边,那么1既可以看作是和S相连,也可以看作是和T相连,就这个题目而言是希望和S连的点越少越好,那么一旦出现这种情况就统统认为那个点是和T相连的,因此我们从S开始dfs遇到残量为0的边就不再继.. 阅读全文