这题用到了偏序集的 Dilworth 定理,之前在选训不知道为什么根余红勋,赵庭伟研究了好久那些东西,没想到资讯竟然会出现这个XD
如果考虑建一张图,顶点是那些船,并且如果两艘船可以停在同一个码头就在他们之间连边,那么问题就变成我们要用最少的完全图来覆盖所有的顶点.而到这里其实可以猜说答案就是在图里"两两没有连边的顶点子集合的最大个数".所以只要对每条线段,看有哪些线段的左端点在他的左端点右边,且和他不能在同一个码头,然后把这些线段 sort ( x 从小到大,一样时 y 从大到小 ) ,求 y 坐标的 LIS 长度就好了.
至于这件事为什么是对的,考虑一个偏序集( 严谨定义可参考维基 ),他的元素是这些线段们,并且如果两条线段有包含或是不相交的情形,就在他们之间定义小于,定法是先比左端点大小再比右端点大小,而如果两条线段不是上面的情形(也就代表他们不能用同一个码头),那就让他们没办法比大小.并且可以知道这样定会满足若 a>b  b>c ,则 a>c ,所以这样定是没问题的.这样题目就变成要用最少条炼( chain ) ( 满足其内部的元素两两可比大小 )去覆盖这个偏序集的所有元素,而 Dilworth 定理说他的数量恰等于最大反炼( antichain )( 满足其内部的元素两两不可比大小 )的大小,就得证了.
Unknown 2020年2月11日 上午9:16
这样不会有什么问题嘛?