『毒瘤算法系列13』情报传递

P r o b l e m \mathrm{Problem} Problem

有一个情报网共有 n n n个人,通过有向的电话线联络。为保证通信安全,需要满足一些要求,这些要求分为两类:

  • ①从第 a a a个人通过一条或多条电话线可以联系到第 b b b个人;
  • ②从第 a a a个人通过一条或多条电话线不能联系到第 b b b个人。

现在作为总工程师的你需要构造一个合法的情报网,使得这个情报网满足给定要求,或者告诉情报机构这样的情报网是不存在的。

S o l u t i o n \mathrm{Solution} Solution

这道题 a a a如果到 b b b的情况一定满足的话,一定要在满足这对条件的情况下,其它对尽量难以到达,这是一种贪心的最优策略。因此我们只要将 ① ① 中的边连接起来,在判断 ② ② 是否合法即可。

那么我们如何判断合法呢?显然我们只需要用tarjan缩点判断A能否到达B即可。判断方法就是用数组暴力标记,类似于二维的DP: f [ i ] [ j ] f[i][j] f[i][j]表示当前节点 i i i是否是节点 j j j所能到达的。

这样转移的复杂度是不优秀的: O ( n 2 ) O(n^2) O(n2).

由于这只是0/1状态,如果我们使用bitset中的或操作,复杂度可以优化到: O ( n

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值