poj2186 求有向图G中所有点都能到达的点的数量

该博客介绍了一种解决有向图问题的方法,旨在计算从图中所有节点都能到达的节点数量。通过使用 Tarjan 算法进行强连通分量分解,并分析每个连通分量的出度,来确定符合条件的节点数量。
摘要由CSDN通过智能技术生成
/*题意:有向图,求这样的点的数量:所有点都能到达它.缩点成有向无环图,思:如果该强连通有出度,那么
从该出度出去的边必然回不来(已经缩点了),所以有出度的强连通必然不是。那么是不是所有出度为0的强连通
分量都是呢?显然不是,如果存在多个出度为0的强连通,他们必然无解(他们之间必然不连通)。
任然遍历边,判断不在一个连通分量中的边(即为缩点后的边)和点,考察期出度即可。*/
#include<iostream>     //329ms,1A,基础题。
#include<vector>
#include<cstdio>
#include<cstring>
#include<stack>
#include<queue>
using namespace std;
int n;int m;
const int MAX=10001;
vector<vector<int> >edges(MAX);
int visited[MAX];
int low[MAX];
int dfn[MAX];
bool has_outd[MAX];        //是否有出度
int Strongly_connected_branch[MAX];  //并为一个强连通,标记为1.2.3...
int num;int times; 
bool is_popular[MAX];       //整个强连通分支i是否有出度,其中一个点有即有
stack<int>s;           
bool instack[MAX];
int num_of_popular;          //统计最终数量
void tarjan(int u)
{
    low[u]=dfn[u]=times++;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值