会员专享
请先
登录,登录后可使用今日免费解锁;
开通会员后可解锁完整内容。
解题思路
本题的算法标签是「模拟」,本质是在一张有向图上模拟消息的洪水填充(Flood Fill / BFS):把每个用户看成一个点,把「用户 i 的转发名单」看成从 i 出发的若干条有向边——forwardLists[i] 的第 j 位为 1,就有一条边 i→j。消息从初始发送者出发,沿有向边不断扩散,因此
答案 = 从 initialSenders 中的每个用户出发、沿有向边能走到的所有用户(初始发送者自身也算收到)。
用二进制位表示集合(bitset)。 因为 N≤16,可以把「已收到消息的用户集合」直接压进一个整数的低 N 位,位运算就是集合运算:
mask = (1 << N) - 1:只保留 0∼N−1 号用户的位;