若 S 或 T 大小为 1,那么将 S 与 T 中的点两两连边就能达到最优解。对于 |S|,|T|\ge2 的情况,注意到如果存在 u\in S,v\in T 满足 u 能到达除 v 之外的某个 T 中的点,v 也能被除 u 之外的某个 S 中的点到达,那么连边 v\to u 后新图的 |S|,|T| 都减小 1。并且,任何连边方式都最多使 |S|,|T| 减小 1。这意味着,如果任何 |S|,|T|\ge2 的图都能找到一组 u,v,那么答案为 \max(|S|,|T|)。
实际上,这是满足的。因为,若 |S|,|T| 中点两两可达,那么任取一组 u,v 均可;否则取 u,v 满足 u 不可达 v 即能满足要求。
下面解决构造方案的问题。
做法一
考虑如下算法:对于 S 中的每个点 u,在 DAG 上以它为起点搜索,只走之前没访问过的点,若遇到了一个 T 中的点 v 则直接停止搜索,记录下这对 (u,v)。这样我们得到了若干对 (u_i,v_i)。然后,我们对于所有 i,将 v_i 和 u_{i+1} 连边,v_n 和 u_1 连边。这样,所有的 u_i,v_i 形成了一个环。然后,将新图重新缩点得到 S',T',此时 S' 与 T' 中点两两可达,随便连即可。
显然这样的构造只有 \max(|S|,|T|) 条边,我们只需要证明 S' 与 T' 中点两两可达。我们只要证明,新图 S' 中每个点可达环上一个点,T' 中每个点可被环上一个点到达。考虑搜索算法的过程容易证明,搜索算法中每个访问过的点都能到达环上的点,每个没访问过的点都能被环上的点到达。于是得证。