众所周知,KM 有很多 O(n3)O(n^3)O(n3) 写法。
但我对这句话有一个疑惑,它在基本所有代码中都出现:
if (slack[y] > lx[x] + ly[y] - w[x][y]) { slack[y] = lx[x] + ly[y] - w[x][y]; pre[y] = v; } //x指左部点,y指枚举的右部点,v指当前匹配x的右部点
这个时候这条边不是还不存在,没有加入交错树吗?为什么要把 yyy 的前驱设为 vvv 呢?
而且根据我的尝试,如果把这句话挪到其它地方或者直接删掉,会直接 WA 掉。
bdfs 无果,有没有奆佬解释一下这是为什么?