P13007 【MX-X13-T2】「KDOI-12」不要去思考未来,把这留给未来的你。

题目背景

未来的你在打一场模拟赛。

题目描述

模拟赛中共有 $T$ 道题,每道题有 $n$ 个子任务和 $m$ 个特殊性质。每个子任务均满足 $m$ 个特殊性质的一个子集。 定义一组子任务依赖 $(i,j)$ 表示子任务 $j$ 依赖子任务 $i$,也就是只有通过了子任务 $i$ 才能通过子任务 $j$。 考虑到模拟赛有懒惰的出题人和愚蠢的在线法官,子任务依赖的条数必然是越少越好。现在你想知道最少配置多少组子任务依赖才能保证: * 不存在一对子任务 $x,y$ 使得满足子任务 $y$ 的数据必然满足子任务 $x$,但是在不通过子任务 $x$ 的情况下**仍然有可能**通过子任务 $y$; * 不存在一对子任务 $x,y$ 使得存在满足子任务 $y$ 的数据**不**满足子任务 $x$,但是在不通过子任务 $x$ 的情况下**无法**通过子任务 $y$。 形式化地讲,设第 $i$ 个子任务的特殊性质集合为 $S_i$,那么你要选择尽可能少的 $(u_x,v_x)$ 二元组使得: * 对于任意 $(i,j)$ 满足 $S_i\subseteq S_j$,均存在 $j=p_1,p_2,\dots,p_M=i$ 使得对于任意 $1\leq k

输入格式

第一行,一个正整数 $T$,表示题目数量。对于每道题目: * 第一行,两个正整数 $n,m$,表示子任务数量和特殊性质数量。 * 接下来 $n$ 行,每行一个长度为 $m$ 的 `01` 串。第 $i$ 个子任务满足特殊性质 $j$ 当且仅当第 $i$ 行的字符串的第 $j$ 个字符为 `1`。 **保证不存在两个子任务满足的特殊性质相同。**

输出格式

对于每道题目,一行,一个非负整数,表示子任务依赖数量的最小值。

说明/提示

**【样例解释】** 对于第二道题目:不妨设四个特殊性质分别为 $\text{ABCD}$,那么五个子任务分别符合特殊性质 $\{\text{ABC}\}$、$\{\text{AB}\}$、$\{\text{A}\}$、$\{\text{D}\}$、和 $\varnothing$。可以证明,配置以下子任务依赖符合要求且最优: * $(1,2)$; * $(2,3)$; * $(3,5)$; * $(4,5)$。 **【数据范围】** | 测试点编号 | $n,m\leq$ | 特殊性质 | |:--:|:--:|:--:| | $1\sim2$ | $2$ | 无 | | $3\sim9$ | $5$ | 无 | | $10\sim13$ | $10$ | 无 | | $14\sim20$ | $16$ | A | | $21\sim25$ | $16$ | 无 | * 特殊性质 A:保证每个子任务最多满足两个特殊性质。 对于所有数据:$1\leq T\leq 6$,$1\leq n,m\leq16$,输入的字符串由 `0` 和 `1` 组成,保证不存在两个子任务满足的特殊性质相同。