摘要:
题意:给定两个关系矩阵,分别表示雇主和雇员的相互好感度,好感度为1最优,N最差。如果一个人与好感度为P的人匹配的话,差值为P-1,现在要求是的总共的差值最小的匹配方法,并且输出所有的匹配方案。解法:将两两关系矩阵转化为边上的权值,然后进行一次最大匹配,最后dfs枚举输出结果,数据中给的矩阵上下颠倒了。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>#include <iostream>#include <cmath> 阅读全文
摘要:
做这题的时候突然觉得每次修改一次可行标就一定能够找到增广路,因此把while(1)改成了int T = 2; while(T--) {}谁知道WA了,这就比较纠结了,后面手动模拟了一组数据才知道不在交错树的点不一定不在已经存在的匹配中,增加的可行边右端点可能就落在了一条匹配边上,那么这样一来并不能保证找到一条增广路。这样也就解释了为什么对于slack[]数组每次进行一个更新,因为这个值由于循环次数的增加可能多次被利用到,没有找到增广路,那么原来的那条交错树一定还会边遍历一遍,而且会有新的节点加入到S和T集合(其实反正都会遍历一遍,那么不更新slack数组,dfs过程中也会自动缩小)。题意:有N 阅读全文