问题:http ://www.spoj.com/problems/DIVREL
有问题的是,我们只需要从给定的一组元素中找到最大数量的元素不是倍数(a 可以被 b 整除)。如果我们只是从一个元素到它的倍数创建一条边并构建一个图,它将是一个 DAG。
现在问题变成了使用Dilworth 定理找到包含等于反链基数的所有顶点的最小链数,因为它是一个部分有序的集合。
可以使用二分匹配找到最小链(如何:它是最小路径覆盖)但现在我无法找到反链元素本身?
问题:http ://www.spoj.com/problems/DIVREL
有问题的是,我们只需要从给定的一组元素中找到最大数量的元素不是倍数(a 可以被 b 整除)。如果我们只是从一个元素到它的倍数创建一条边并构建一个图,它将是一个 DAG。
现在问题变成了使用Dilworth 定理找到包含等于反链基数的所有顶点的最小链数,因为它是一个部分有序的集合。
可以使用二分匹配找到最小链(如何:它是最小路径覆盖)但现在我无法找到反链元素本身?
要计算反链,您可以:
两个这样的元素之间不能有边,否则我们会发现一条边没有被顶点覆盖,从而导致矛盾。
找到最小顶点覆盖的算法是(来自上面的链接):
奇数索引子集的并集是顶点覆盖。