这样行不行?用并查集将所有坏人和临近节点放到一个集合里,然后dfs剩余的点。