poj 1236 强连通图 tarjan算法

题目链接:http://poj.org/problem?id=1236

题目大意:

各学校之间有单向的网络。如果 A—>B 则如果 A 得到一个软件则可以给学校B,在这样一个有向图中,有两个问题。
1, 至少要向多少个学校提供软件,可使所有学校都得到软件。
2,至少需要几条边,才能使向任一个学校提供软件,都能使所有学校都得到软件,即使得该图变为一个强连通图。

思路:

用Tarjan算法可以计算出强连通分量的个数。
在此基础上,缩点(就是把一个强连通分量看成一个点),计算每个缩点的入度和出度。
缩点入度为0的个数就是第一问的答案。因为如果入度为0,说明没有其他的缩点可以到达这个缩点,所以这个缩点必须分配一个software。反之,如果有入度,则可以从别的缩点接收到这份software而不用自己使用一个。
缩点入度为0的个数和出度为0的个数的最大值就是第二问的答案。每个入度为0的点都必须有入度,每个出度为0的点也必须有出度,答案取决于其最大值。可以把缩点的组成看成一棵新的树,每个叶子结点表示出度为0的缩点,每个根结点表示入度为0的缩点。如果要使每个缩点都要有入度和出度,可以把出度为0的点连到入度为0的点。如果出度为0的大,则需要更多的从出度为0出来的线;反之,如果入度为0的大,则除了从出度为0连过来的线之外还需要额外的进入入度为0的线。所以答案是取决于两者的最大值。

 


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Human_CK/archive/2011/02/25/6206956.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值