HDU1269 强连通分量-tarjan算法

该博客讨论了如何利用tarjan算法检查给定的单向图是否为强连通图。强连通图是指图中任意两点间都存在路径。博主介绍了tarjan算法的基本思想,包括为节点分配时间标号dfn和low,并通过比较两者判断连通分量。文章指出,证明图是强连通的条件是整个图仅包含一个连通分量。
摘要由CSDN通过智能技术生成

题意就是在给定一个图的情况下,问这个单向图是不是强连通图。

强连通图的意思就是图中任何一个点都可以到达另一个点。

分析:这道题是tarjan算法求强连通分量的模板题,对于tarjan算法求连通分量的方法大致上是给每一个点标两个号,一个是自己是第几个被搜索到i,也叫时间标号(代码中用dfn【i】来表示第i个点的标号),另一个是这个点的子树中所能搜到的最小的时间标号(代码中用low【i】)表示,如果时间标号==low【i】那么表示形成了一个联通分量,具体的或者更加详细的参考https://www.cnblogs.com/shadowland/p/5872257.html

再来说本题:要想证明一个图是连通图,则只需要证明整个图只有一个连通分量即可;

代码:

#include<cstdio>
#include<stack>
#include<cstring>
#include<algorithm>

using namespace std;

const int maxn = 1e4 + 10;
const int maxm = 1e5 + 10;
int cnt = 0;
int ans = 0;
int n, m;
int head[maxn], dfn[maxn], low[maxn];
bool vis[maxn];
stack<int>iron;
struct Edge
{
		int from,to, next;
}edge[maxm];

void addedge(int u, int v)
{
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值