首页 > 其他分享 >tarjan求有向图强连通分量

tarjan求有向图强连通分量

时间:2023-02-04 12:11:06浏览次数:54  
标签:tarjan 有向图 int 连通 num low include

tarjan算法的简单应用

hdu1269

题目链接

题意

  • 给定有向图,问改有向图是否只有一个强连通分量

思路

  • tarjan算法求有向图强连通分量的简单应用

代码

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <vector>
#include <cstddef>
#include <stack>
using i64 = long long;
using ll = long long;
const int N = 10005;
std::vector<int> g[N];
int n, m, low[N], num[N], id, cnt, sscid[N];
std::stack<int> st;
void dfs(int u) {
	num[u] = low[u] = ++ id;
	st.push(u);
	for (unsigned int i = 0; i < g[u].size(); ++ i) {
		int v = g[u][i];
		if(!num[v]) {
			dfs(v);
			low[u] = std::min(low[u], low[v]);
		} else if(num[v] < num[u]) {
			low[u] = std::min(low[u], num[v]);
		}
	}
	if(num[u] == low[u]) {
		++ cnt;
		while(1) {
			int v = st.top();
			st.pop();
			sscid[v] = cnt;
			if(v == u) break;
		}
	}
	return;
}
void tarjan() {
	for (int i = 1; i <= n; ++ i) {
		if(!num[i]) {
			dfs(i);
		}
	}
	return;
}
void init() {
	for (int i = 0; i < N; ++ i) g[i].clear();
	std::memset(low, 0, sizeof(low));
	std::memset(num, 0, sizeof(num));
	std::memset(sscid, 0, sizeof(sscid));
	id = 0;
	cnt = 0;
	return;
}
void slove() {
	init();
	for (int i = 1; i <= m; ++ i) {
		int u, v;
		std::cin >> u >> v;
		g[u].push_back(v);
	}
	tarjan();
	std::cout << (cnt == 1 ? "Yes\n" : "No\n");
	return;
}
int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);
	std::cout.tie(nullptr);
	while(std::cin >> n >> m, n || m) {
		slove();
	}
	return 0;
}

标签:tarjan,有向图,int,连通,num,low,include
From: https://www.cnblogs.com/lemonsbiscuit/p/17091255.html

相关文章

  • 双连通分量
    点双连通poj1523题目链接题意给出无向图,求割点,并给出每个割点去掉后会形成几个分量思路tarjan,会形成几个分量注意根节点的不同即可代码#include<iostream>#i......
  • kosarajo求强连通分量
    kosarajo求强连通分量的证明因为根据反向图的dfs求出的拓扑序列使得原本的dag图中点的搜索优先级倒转所以在原图dfs会优先将最末端的点优先跑完,而上面的点再跑时,因为下......
  • Tarjan 强连通分量 板子
    #include<bits/stdc++.h>usingnamespacestd;constintN=10005;intn,m;intscc[N],siz[N],cnt;intdfn[N],low[N],tot;bitset<N>instk;stack<int>stk;......
  • Tarjan 算法 (图连通性)
    1.割边和割点首先我们dfs一遍构造出dfs树并排出dfn序.显然这棵树没有横叉边.考虑割边的形成条件.显然割边只能是树边,因为非树边会和对应的树上的路径组成环.......
  • 图的连通性问题
    \(dfs\)树及其他概念在这样一棵由在图上进行\(dfs\)所形成的\(dfs\)树中,我们注明了三种边。黑色的边为树边。绿色的边为前向边,由一个节点指向它子树上的节点。......
  • Solution 题解 UVA1389 Hard Life: 最小割,有向图,分数规划,和牛顿迭代
    题解UVA1389HardLife:最小割,有向图,分数规划,和牛顿迭代Preface黑题好耶看到了题解里面大多数是二分,我就来讲一讲简单又快速的DinkelbachAlgorithm吧!0-1分数规划......
  • 畅捷通T+与道一云对接集成报销信息列表连通凭证创建
    畅捷通T+与道一云对接集成获取报销信息列表连通凭证创建数据源系统:道一云在道一云坚实的技术基础上,道一云推出全新升级的2.0产品矩阵,分别是低码平台、智能门户、场景......
  • 伯俊ERP与金蝶云星空对接集成连通应收单新增
    伯俊ERP与金蝶云星空对接集成表头表体组合查询连通应收单新增(应收单-标准应收单(KD应收单销售退)数据源系统:伯俊ERP未来,伯俊科技也会砥砺前行,不断为品牌提供更全面的零售终......
  • Linux下检测网卡与网线连通状态
    Linux_stat.c#include<stdio.h>#include<stdlib.h>#include<string.h>#include<fcntl.h>#include<errno.h>#include<sys/ioctl.h>#include<sys/types.h>#include<sy......
  • 外网测试连通率tcping
    tcping10.10.10.108081   二、tcping介绍tcping:tcping命令基于tcp协议监控,可以从较低级别的协议获得简单的,可能不可靠的数据报服务。原则上,TCP应该能够在从容硬......