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

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

题目背景

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

题目描述

模拟赛中共有 TT 道题,每道题有 nn 个子任务和 mm 个特殊性质。每个子任务均满足 mm 个特殊性质的一个子集。

定义一组子任务依赖 (i,j)(i,j) 表示子任务 jj 依赖子任务 ii,也就是只有通过了子任务 ii 才能通过子任务 jj

考虑到模拟赛有懒惰的出题人和愚蠢的在线法官,子任务依赖的条数必然是越少越好。现在你想知道最少配置多少组子任务依赖才能保证:

  • 不存在一对子任务 x,yx,y 使得满足子任务 yy 的数据必然满足子任务 xx,但是在不通过子任务 xx 的情况下仍然有可能通过子任务 yy
  • 不存在一对子任务 x,yx,y 使得存在满足子任务 yy 的数据满足子任务 xx,但是在不通过子任务 xx 的情况下无法通过子任务 yy

形式化地讲,设第 ii 个子任务的特殊性质集合为 SiS_i,那么你要选择尽可能少的 (ux,vx)(u_x,v_x) 二元组使得:

  • 对于任意 (i,j)(i,j) 满足 SiSjS_i\subseteq S_j,均存在 j=p1,p2,,pM=ij=p_1,p_2,\dots,p_M=i 使得对于任意 1k<M1\leq k<M,存在 xx 使得 ux=pk,vx=pk+1u_x=p_k,v_x=p_{k+1}
  • 对于任意 (i,j)(i,j) 满足 SiSjS_i\subseteq S_j,均存在 j=p1,p2,,pM=ij=p_1,p_2,\dots,p_M=i 使得对于任意 1k<M1\leq k<M,存在 xx 使得 ux=pk,vx=pk+1u_x=p_k,v_x=p_{k+1}

并求出选择二元组数量的最小值。

输入格式

第一行,一个正整数 TT,表示题目数量。对于每道题目:

  • 第一行,两个正整数 n,mn,m,表示子任务数量和特殊性质数量。
  • 接下来 nn 行,每行一个长度为 mm01 串。第 ii 个子任务满足特殊性质 jj 当且仅当第 ii 行的字符串的第 jj 个字符为 1

保证不存在两个子任务满足的特殊性质相同。

输出格式

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

3
4 2
00
01
10
11
5 4
1110
1100
1000
0001
0000
7 4
0101
1101
1001
0010
1110
0100
1000
4
4
7

提示

【样例解释】

对于第二道题目:不妨设四个特殊性质分别为 ABCD\text{ABCD},那么五个子任务分别符合特殊性质 {ABC}\{\text{ABC}\}{AB}\{\text{AB}\}{A}\{\text{A}\}{D}\{\text{D}\}、和 \varnothing。可以证明,配置以下子任务依赖符合要求且最优:

  • (1,2)(1,2)
  • (2,3)(2,3)
  • (3,5)(3,5)
  • (4,5)(4,5)

【数据范围】

测试点编号 n,mn,m\leq 特殊性质
121\sim2 22
393\sim9 55
101310\sim13 1010
142014\sim20 1616 A
212521\sim25
  • 特殊性质 A:保证每个子任务最多满足两个特殊性质。

对于所有数据:1T61\leq T\leq 61n,m161\leq n,m\leq16,输入的字符串由 01 组成,保证不存在两个子任务满足的特殊性质相同。