#4445. 病毒检测与感染终端 / Virus Testing and Infected Terminals
病毒检测与感染终端 / Virus Testing and Infected Terminals
题目描述
高桥君是企业网络管理员。网络中有 台终端,编号 到 。每台终端处于"感染"或"未感染"两种状态之一,但高桥君不知道哪些终端被感染。
高桥君执行了 次扫描。每次扫描 ()同时检测指定的 台终端集合 ,返回结果 :
- ("检测到感染"):集合中至少有 1 台感染终端。
- ("无感染"):集合中没有感染终端。
注意:不同扫描的检测集合可能重叠,甚至完全相同。
将每台终端分配为"感染"或"未感染"的方法称为感染状态分配。一个分配与所有扫描结果一致,当且仅当对所有扫描 ()满足:
- 当 时:集合中至少有 1 台被分配为感染。
- 当 时:集合中没有终端被分配为感染。
保证至少存在一个与所有扫描结果一致的分配。在所有满足条件的分配中,求感染终端数量的最小值。
输入格式
第一行两个整数 。
接下来 行,每行格式为 ,表示一次扫描。
输出格式
输出一个整数,表示所有与扫描结果一致的分配中,感染终端数量的最小值。
3 2
2 1 2 1
2 2 3 0
1
5 4
3 1 2 3 1
2 4 5 1
2 1 4 0
2 2 5 1
2
8 5
4 1 2 3 4 1
4 5 6 7 8 1
4 1 3 5 7 1
4 2 4 6 8 0
4 3 4 7 8 1
2
数据范围
- 每次扫描中, 互不相同
- 保证至少存在一个与所有扫描结果一致的分配
- 输入均为整数
提示
本题考查状态压缩。由于 ,可以用一个 位二进制数表示所有终端的感染状态。
对于每个扫描,将检测集合转换为位掩码。然后枚举所有可能的感染状态( 到 ),检查是否与所有扫描结果一致,记录满足条件的最小感染数。
时间复杂度 ,空间复杂度 。
来源
AtCoder AWC 0052D