若 f(u, v) \operatorname{and} f(v, u) = 1,则 f(u, v) = f(v, u) = 1,即两点双向可达,那么 u, v 在一个 SCC 里面。
若 f(u, v) \operatorname{xor} f(v, u) = 1,则等价于 u, v 不在一个 SCC 内且 f(u, v) \operatorname{or} f(v, u) = 1。
若 f(u, v) \operatorname{or} f(v, u) = 1,单独看不太好找性质,但是你发现对于所有 u, v 一定都满足这个条件;即对于任意两个点 u, v,一定存在 u \to v 的路或者 v \to u 的路;这说明,缩点后是一条链,因为若不是链的话出现 A \to B, A \to C 分叉的情况,B, C 之间就不存在路可达了。
那么通过性质,我们容易想想到用并查集将 u, v 一定在一个 SCC 里的点合并起来。
那么现在问题转化为有 m 个点集 S_1, \cdots, S_m,每个点集内的点一定要在同一个 SCC 中,有 q 个形如 u, v 两个集合 S_u, S_v 一定不能并成一个 SCC 的限制,问最小边数。
考虑一个 l 个点的 SCC,显然其边数最少是用一个 l 条边的环将它们串起来;注意若 l = 1,那么不需要边。
于是考虑最后缩点后的链的长度 len(SCC 个数)与点数 = 1 的 SCC 数量 cnt,那么显然最小边数是 n - cnt + len - 1,于是要求 len - cnt 即点数 >1 的 SCC 个数 p 尽可能的少。