CF1630F Making It Bipartite

题目描述

给定一个无向图,有 $n$ 个顶点,编号从 $1$ 到 $n$,其中第 $i$ 个顶点被赋予一个值 $a_i$,所有 $a_i$ 互不相同。如果 $a_u$ 能整除 $a_v$ 或 $a_v$ 能整除 $a_u$,则在顶点 $u$ 和 $v$ 之间有一条边。 请你求出,最少需要删除多少个顶点,使得剩下的图是二分图。当你删除一个顶点时,与该顶点相连的所有边也会被删除。

输入格式

输入包含多组测试用例。第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例的数量。接下来是每个测试用例的描述。 每个测试用例的第一行包含一个整数 $n$($1 \le n \le 5 \cdot 10^4$),表示图中顶点的数量。 第二行包含 $n$ 个整数,第 $i$ 个为 $a_i$($1 \le a_i \le 5 \cdot 10^4$),表示第 $i$ 个顶点的值,所有 $a_i$ 互不相同。 保证所有测试用例中 $n$ 的总和不超过 $5 \cdot 10^4$。

输出格式

对于每个测试用例,输出一个整数,表示最少需要删除多少个顶点,使得剩下的图是二分图。

说明/提示

在第一个测试用例中,如果我们删除值为 $1$ 和 $2$ 的顶点,剩下的图就是二分图,因此答案为 $2$,不可能删除更少的顶点仍然得到二分图。 BeforeAfter![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1630F/942c26248b7d172f5cdc09acd9d7537a30e3800a.png)![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1630F/bc5251b7b4c65e753205357055524fdabbab189f.png) 测试用例 #1 在第二个测试用例中,不需要删除任何顶点,因为图已经是二分图,所以答案为 $0$。 BeforeAfter![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1630F/e14c807620a684d1c42eae27e1634f3f79d2b591.png)![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1630F/e14c807620a684d1c42eae27e1634f3f79d2b591.png) 测试用例 #2 在第三个测试用例中,只需要删除值为 $12$ 的顶点,因此答案为 $1$。 BeforeAfter![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1630F/0e274acd7bb55f89f89b1e0e170ad88f96e25ebb.png)![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1630F/58073552a235882d99e254b667a8c605aab677e0.png) 测试用例 #3 在第四个测试用例中,删除值为 $2$ 和 $195$ 的顶点,答案为 $2$。 BeforeAfter![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1630F/e6ab60dbaacd357dd6018ee973b8769b11114587.png)![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1630F/e741a3508bfca233ca2a287cefbb0585172278f0.png) 测试用例 #4 由 ChatGPT 4.1 翻译