P2341 [USACO03FALL][HAOI2006]受欢迎的牛 G 题解

博客探讨了USACO03FALL和HAOI2006的G题,即寻找图中每个点都能到达的点数。文章介绍了强连通分量的概念,解释了如何通过DFS算法找到强连通分量,并通过举例说明了如何在原图上检查边来统计答案。此外,还讨论了出度为0的点对答案的影响,证明了答案的存在性和唯一性。最后,指出该方法的时间复杂度为O(n+m)。
摘要由CSDN通过智能技术生成

博客园同步

原题链接

POJ的链接

简要题意:

给定一张图,求多少个点,每个点都能到达它。

本题作为强连通分量的入门题。

何为强连通分量?有什么用?

下面一一解释。

首先,我们要确认,这道题目如果不用强连通分量而用其它方法(比如说暴力)的话:

时间复杂度将达到 O ( n 2 ) O(n^2) O(n2),此时不易通过,也非正解。

强连通分量是什么?我们来看一张图吧。

我们希望,如果能把环通过某种方式去掉,然后变成有向无环图,就很容易了。

一个强连通分量中的点两两可达。(有向图中)一个点也可以被认为是一个强连通分量。

也就是说,你会发现,一个环 或者 若干个相交的环 都会变成一个强连通分量。

显然它们两两可达,最后图会变成若干个强连通分量。

你会发现, 1 1 1 是一个强连通分量, 2 , 3 , 4 , 5 2,3,4,5 2,3,4,5 是一个强连通分量, 6 6 6, 7 7 7, 8 8 8 均为一个单独的强连通分量。

此时我们可以简化这个图变成:

q x qx qx 表示 x x x 号强连通分量。

此时你发现 q 4 q4 q4 就是答案,里面装的是 7 7 7,所以答案为 1 1 1.

那么问题在于,如何求强连通分量?

回到这个图。

d f n i dfn_i dfni 表示 i i i 的遍历编号(就是我们常说的 “时间戳”), f i f_i fi i i i 号节点属于的强连通分量编号, l o w i low_i lowi i i i 号节点能走到的 d f n dfn dfn 值最小的节点。

一开始 l o w i = i ( 1 ≤ i ≤ n ) low_i = i (1 \leq i \leq n) lowi=i(1in).

首先,我们从 1 1 1 节点开始遍历,走到 2 2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值