Dilworth定理学习笔记
前置知识点
偏序关系,见维基百科-偏序关系
偏序集,见百度百科-偏序集
链,反链,极大链,极大反链,最大链,最大反链,Dilworth定理,见链-反链-Dilworth定理
思路
由Dilworth定理可知,我们本题需要计算该有向图中的最长反链(即要求一个最大的集合,其中元素两两不可比较,也就是题中的两两不能通过水流到达),而最长反链就是最小链覆盖。现在问题变成了:如何求一个图的最小链覆盖?我们先考虑一个弱化的问题:如何求一个图的不可相交的最小链覆盖?(即链与链没有交)我们考虑开始的时候每个点都是独立的,割裂的一条路径。然后我们建立一个二分图,将每个点拆成两个点,当有一条a到b的路径时,我们对a到b’连一条边。(为什么是二分图?可以理解为一个点的入度和出度都只能为1,这样保证就是一条链,不然可能就是一个Y字型)。我们不难发现每次增加一条匹配的时候,图中的链就少了一条,那么显然最小链覆盖=原来的节点数-匹配的个数。不过该题中,没有要求链不可相交(因为不要求链是连续的)。因为数据范围只有100,考虑使用floyd进行传递闭包,这样我们就能知道那些点相互可达,这样就变成了可以选“连续的链”的最小链覆盖,也就是我们之前解决的弱化的问题。这样这道题的最终思路就很清晰了:flyod求传递闭包,二分图匹配求最小链覆盖,dilworth定理将其转化成最长反链也就是本题的答案。
代码
1 |
|