传送门
题意
给你一个长度为 \(n\) 的序列 \(a\),构建一个无向图:若 \(a_i | a_j\),则在 \(i\) 和 \(j\) 中连边。
求最少删除多少个点,才能使得剩下的图是二分图。
思路
首先,我们知道倍数关系是一个偏序关系,即 \(a_i | a_j, a_j | a_k \rightarrow a_i | a_k\)。
所以,一旦出现了一个长度 \(\ge 3\) 的链,那么就会出现奇环,就不可能是二分图。
也就是说,最后的图中每个点的度数都 \(le 1\),可以将边定向(不妨设是大的数向小的数连边),转换成每个点要么有入度,要么有出度。
考虑拆点,\(x_0\) 表示 \(x\) 这个数有出度,\(x_1\) 则表示这个点有入度。
拆点后,将互相矛盾的状态连边(无向边),得到一个新图,显然,这个图的最大独立集就是最后能保留下来最多的数个数。
但是,普通图的最大独立集是 NPC,考虑怎么转换这个图。
因为我们就是从一个有偏序关系的图得到的这个图,很自然地想让它也有偏序关系。
把这个图定向,变成有向图(大连向小),显然得到了一个 DAG,同时还是偏序集。
那么这个时候,答案是这个图的最大独立集,也是偏序集的最长反链。
根据 Dilworth 定理,可以转换为偏序集的最小链覆盖,做完了。
补充知识
最小链覆盖
即,在一个图上用最少的链覆盖这个图的所有边。
求法
拆点,将每个点拆成入点和出点。
把每条边转换,得到了一个二分图。
此时,每一个匹配都会将两个链合并,于是最小链覆盖 = 总点数 - 最大匹配 = 总点数 - 最大流
偏序集及相关知识
偏序集
若集合 \(S\) 和其上的一个二元关系 \(\preceq\) 满足性质:
- 自反性:\(\forall a \in S, a \preceq a\)
- 反对称性:\(\forall a, b \in S, a \preceq b \land b \preceq a \Rightarrow a = b\)
- 传递性:\(\forall a, b, c \in S, a \preceq b \land b \preceq c \Rightarrow a \preceq c\)
则 \(S\) 是偏序集,\(\preceq\) 是其上的偏序。
一个显然的例子是 \(\mathbb{N}, \mathbb{Z}, \mathbb{Q}, \mathbb{R}\) 都关于二元关系 \(\leq\) 构成偏序。
全序集
类比偏序集理解。
若集合 \(S\) 和其上的一个二元关系 \(\preceq\) 满足性质:
- 自反性:\(\forall a \in S, a \preceq a\)
- 反对称性:\(\forall a, b \in S, a \preceq b \land b \preceq a \Rightarrow a = b\)
- 传递性:\(\forall a, b, c \in S, a \preceq b \land b \preceq c \Rightarrow a \preceq c\)
- 连接性:\(\forall a, b \in S, a \not = b \Rightarrow a \preceq b \lor b \preceq a\)
则 \(S\) 为全序集,\(\preceq\) 是其上的全序。
偏序集的链与反链
偏序集 \(S\) 上的链是其全序子图 \(T\),具体地,\(\forall a, b \in T, a \not = b \Rightarrow a \preceq b \lor b \preceq a\)。
即链上的任意两点都可以比较(可以比较即在某一顺序上满足偏序关系)。
偏序集 \(S\) 上的反链是集合 \(T\) 满足,\(\forall a, b \in T, a \not = b \Rightarrow a \not \preceq b \land b \not \preceq a\)。
即反链上任意两点都不可以比较。