首页 > 其他分享 >Tarjan 强连通分量 板子

Tarjan 强连通分量 板子

时间:2023-02-01 08:44:44浏览次数:49  
标签:Tarjan int 连通 板子 dfn low cnt stk instk

#include <bits/stdc++.h>

using namespace std;

const int N = 10005;
int n, m;
int scc[N], siz[N], cnt;
int dfn[N], low[N], tot;
bitset<N>instk;
stack<int>stk;
vector<int>e[N];
vector<int>ans[N];

void tarjan(int u)
{
	dfn[u] = low[u] = ++tot;
	stk.push(u);
	instk[u] = 1;
	
	for (int v : e[u]) {
		if (!dfn[v]) {
			tarjan(v);
			low[u] = min(low[u], low[v]);
		} else if (instk[v]) {
			low[u] = min(low[u], dfn[v]);
		}
	}
	if (dfn[u] == low[u]) {
		// scc root
		cnt++;
		int v;
		do {
			v = stk.top(); stk.pop();
			instk[v] = 0;
			ans[u].push_back(v);
		} while (v != u);
		if (ans[u].size() == 1) {
		    cnt--;
		}
	}
}

int main()
{
	scanf("%d%d", &n, &m);
	for (int i = 1, a, b; i <= m; i++) {
		scanf("%d%d", &a, &b);
		e[a].push_back(b);
	}
	for (int vert = 1; vert <= n; vert++) {
		if (!dfn[vert]) {
			tarjan(vert);
		}
	}
// 	for (int i = 1; i <= n; i++) {
// 		sort(ans[i].begin(), ans[i].end());
// 	}
	printf("%d\n", cnt);
// 	for (int i = 1; i <= n; i++) {
// 		if (!ans[i].size()) continue;
// 		for (int j = 0; j < ans[i].size(); j++) {
// 			printf("%d ", ans[i][j]);
// 		}
// 		printf("\n");
// 	}
	return 0;
}

标签:Tarjan,int,连通,板子,dfn,low,cnt,stk,instk
From: https://www.cnblogs.com/CYLSY/p/17081364.html

相关文章

  • Tarjan 算法 (图连通性)
    1.割边和割点首先我们dfs一遍构造出dfs树并排出dfn序.显然这棵树没有横叉边.考虑割边的形成条件.显然割边只能是树边,因为非树边会和对应的树上的路径组成环.......
  • 图的连通性问题
    \(dfs\)树及其他概念在这样一棵由在图上进行\(dfs\)所形成的\(dfs\)树中,我们注明了三种边。黑色的边为树边。绿色的边为前向边,由一个节点指向它子树上的节点。......
  • 倍增LCA板子
    #include<iostream>#include<cstring>#include<algorithm>#include<vector>usingnamespacestd;constintN=5e5+10;intn,m,s,a,b;vector<int>e[N];intde......
  • 轻重链剖分板子
    //LuoguP3384【模板】轻重链剖分/树链剖分#include<iostream>#include<cstring>#include<algorithm>#include<vector>#definelcu<<1#definercu<<1|1usin......
  • 畅捷通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......
  • Qemu查询支持的芯片的板子、CPU型号
    1.查看支持的板子(即SOC):qemu-system-xxx-Mhelp例如:想查询支持的arm芯片的板子:qemu-system-arm-Mhelp想查询支持的PowerPC(32位)芯片的板子:qemu-system-ppc-Mhel......
  • 外网测试连通率tcping
    tcping10.10.10.108081   二、tcping介绍tcping:tcping命令基于tcp协议监控,可以从较低级别的协议获得简单的,可能不可靠的数据报服务。原则上,TCP应该能够在从容硬......
  • 【组会】2023_1_13 看openradar 整理板子v1
    在学校采的数据,计算出来正确的数据大小应该是102400KB,但采下来的数据是51200KB(正确数据的1/2)(所以以后每次采数据之后要先手算一下bin文件大小对不对看openradar代码,......