其他分享
首页 > 其他分享> > 【学习笔记】从 CTSC 2008 祭祀谈起的最长反链及最小链覆盖相关问题的解决方法

【学习笔记】从 CTSC 2008 祭祀谈起的最长反链及最小链覆盖相关问题的解决方法

作者:互联网

本题的题意:给出一个 DAG,求最长反链。

Dilworth 定理:偏序集上最长反链的长度等于最小链覆盖中链的数量。

先做一遍传递闭包,使得 DAG 中 \(x<y\) 的定义"从 \(x\) 向 \(y\) 有连边"变为了"从 \(x\) 出发能够到达 \(y\)“,此时就可以直接套用 Dilworth 定理了。

1. 求解最小链覆盖大小

将所有的点拆为 出(\(x_0\))、入(\(x_1\)) 两点,形成一个二分图。对于 DAG 上的 \(x<y\),连边 \((x_0,y_1)\) 。因为每个出点只能匹配一个入点,每个入点只能匹配一个出点,此时求该二分图的最大匹配

令最大匹配大小为 \(m\),假设最开始每个点自成一条链,接下来每匹配一条边那么最小链覆盖大小就减一,所以最小链覆盖大小为 \(n-m\) 。当然从最大匹配可以还原出最小链覆盖。

2. 构造最长反链方案

这个部分较复杂。

3. 完成本题的第三问

本篇文章的主体内容到这里就结束了,接下来是"祭祀"一题第三问的做法。

其实只需要删除该点以及相邻的点,然后再求最大反链即可,如果大小差为 \(1\) 说明可以。时间复杂度为 \(O(n^2m)\) 。

标签:匹配,覆盖,CTSC,最小链,访问,端点,顶点,2008,反链
来源: https://www.cnblogs.com/qiulyqwq/p/15224828.html