题目大意
求出一个DAG的最长反链长度。
思路
首先给出反链定义:反链是一个偏序集S的子集,其中任意两个元素不可比较。
在此题中就是链上的任意两个点不可比较。
根据Dilworth定理可得最小链覆盖=最长反链长度。
而最小链覆盖(不能相交的)=点数n-最大匹配数ans,
而我们可以用匈牙利算法来求二分图最大匹配。
最后一步就是把 最小链覆盖(可相交)转化为最小链覆盖(不可相交)
我们做一遍floyd传递闭包,就可以使一些本来会相交的路径分离开。
代码
//Standard IO
#