代码改变世界

随笔分类 -  二分图最优匹配 KM算法

LightOJ 1237 KM求最大匹配最小匹配

2012-07-25 18:49 by javaspring, 325 阅读, 收藏,
摘要: 来源:http://acm.hust.edu.cn:8080/judge/contest/view.action?cid=9954#problem/G题意:有一些人来咖啡馆开始时间和离开咖啡馆的时间,但是对应的顺序被打乱了,也就是说不知道每个人来的时间和离开的时间。有一个函数用来计算某人来咖啡馆所需要的费用,求最大能获得多少费用,最少能获得多少费用,还要判断数据是不是合法。思路:由于每个人对应一个开始时间和结束时间,因此我们可以以此建立二分图,边的权值就是所对应的费用。当二分图匹配为人的个数时,说明数据是合法的,然后用KM算法求最大匹配最小匹配就可以了。若二分图的匹配小于人的个数,说明给的数据 阅读全文

杭电2853 Assignment

2012-02-15 09:06 by javaspring, 180 阅读, 收藏,
摘要: 很容易看出这道题是二分图最优匹配,码出来代码后,悲剧的wa了。。。后来想到了错误,却一直想不到改进的方法。我开始的思路是,求出二分图最优匹配,然后判断新的匹配和原来的匹配有多少个不一样,即为需要调整的书目。后来想到这种方法的bug,如果有a、b两个公司和c、d两个任务,对应的值都为1 2,1 2,即权值相等。这样的话,用KM算法可能改变原来的匹配,实际上是不需要改变匹配的,即调整的数目为0,然而用KM算法,可能算出的结果需调整的数目为2。 这道题的巧妙之处在于建图的巧妙,我们可以把每条权值都扩大一个倍数,如扩大K倍,K>n,n为公司的数量。这样最后算出的总权值/K即为实际的总权值。... 阅读全文