首页 > 编程语言 >图论强联通分量(tarjan)算法

图论强联通分量(tarjan)算法

时间:2023-08-04 15:55:52浏览次数:48  
标签:tarjan 联通 int 图论 cnt 101

图论强联通分量(tarjan)算法

#include<bits/stdc++.h>
using namespace std;
int n,m,cnt,cntb,ans;
vector<int> edge[101];
vector<int> belong[101];
bool instack[101];
int dfn[101];
int low[101];
stack<int> s;
void Tarjan(int u)
{
	++cnt;
	dfn[u]=low[u]=cnt;
	s.push(u);
	instack[u]=true; 
	for(int i=0;i<edge[u].size();++i)
	{
		int v=edge[u][i];
		if(!dfn[v])
		{
			Tarjan(v);
			low[u]=min(low[u],low[v]);
		}
		else if(instack[v])
			low[u]=min(low[u],dfn[v]);
	}
	if(dfn[u]==low[u])
	{
		++cntb;
		int node;
		do
		{
			node=s.top();
			s.pop();
			instack[node]=false;
			belong[cntb].push_back(node);
		}while(node!=u);
	}
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=m;++i)
	{
		int u,v;
		cin>>u>>v;
		edge[u].push_back(v);
	}
	Tarjan(1);

	for(int i=1;i<=cntb;++i) 
	{
		for(int j=0;j<belong[i].size();++j)
			ans++;
	}
	cout<<ans;
	return 0;
} 

标签:tarjan,联通,int,图论,cnt,101
From: https://www.cnblogs.com/huangxirui/p/17606177.html

相关文章

  • 【笔记】图论:网络流和二分图
    网络流的求法https://www.cnblogs.com/caijianhong/p/16863491.htmlmisc复杂度分析Dinic的复杂度上界为\(O(n^2m)\)。但是特殊情况下会更快,如二分图匹配是\(O(m\sqrtn)\)的;确定流量上限\(f\)时,复杂度为\(O(mf)\)。最小费用最大流的复杂度上界为\(O(nmf)\)。......
  • 图论提高
    复健\(Day7\)图论一\(DGA:\)有向无环图 \(SCC:\)强连通 \(BCC:\)双连通强联通:有向图中,两个顶点至少存在一条路径(两个顶点可以互相到达)强连通图:每两个顶点都强连通的有向图强连通分量:有向图的极大强连通子图\(1.\)有向图的强连通分量问题模型:对于一些存在依赖关系的模型,若......
  • 8.2 day9图论+dp
    100+70+70+20=260感觉如果时间够感觉还能写一下,结果T3超大数据结构写死了T1观察到最短路径仍然最优,直接dij即可,注意判断终点不用等红灯T2暴力是\(O(n^4)\)的,是dp,但是我写的是分层图,同样时间,还没有优化空间,寄设计\(dp_{i,j}\)为跳到\((i,j)\)所需最小花费每次从所有点转移,算......
  • 成都集训图论篇
    [NOI]网格题目描述跳蚤国王和蛐蛐国王在玩一个游戏。他们在一个\(n\)行$m$列的网格上排兵布阵。其中的\(c\)个格子中,每个格子有一只蛐蛐,其余的格子中,每个格子有一只跳蚤。我们称占据的格子有公共边的两只跳蚤是相邻的。我们称两只跳蚤是连通的,当且仅当这两只跳蚤相邻......
  • 济南 Day 5 图论
    SolutionT1emoairx的二叉树原题链接4114:emoairx的二叉树简要思路一道简单的递归签到题,每次找到较大的数进行除以\(2\),每次递归把步数加一,直到两个点走到同一个点上。完整代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intm;intans(intx......
  • 威联通NAS用Docker搭建Minecraft(MC)服务器
    QNAP使用Docker容器搭建我的世界游戏服务器本教程以1.19版官方版服务端为例,其他服务端也差不多的流程。视频教程:https://www.bilibili.com/video/BV16Z4y1i79R/威联通NAS用Docker搭建我的世界(MC)服务器其他版本我的世界服务器搭建教程:https://blog.zeruns.tech/tag/mc/各种Minecraf......
  • 图论2021版
    图基本概念图可以理解成一个二元组,是由点集V和边集E组成的。G=(V,E),V表示点的集合,E表示边的集合。每条边是一幅点对(v,w)v,w都是点集V中的点。(v,w∈V)图的分类:可以按照边有无方向,可以分为有向图和无向图。比如上图1中,边AB之间没有画出方向(即点之间是无序的),这就是无向图。......
  • 图论入门题
    图论简介:图(Graph)图可以被表示为G={V,E},其中V={v1,...,vN}表示n个点,E={e1,...,eM}表示m条边。常用的储存方式包括邻接表和邻接矩阵。连通分量(ConnectedComponent):各节点间至少存在一条边可以连通。最短路算法:Dijkstra算法是一种求单源最短路的算法,即从一个点开始到......
  • [图论]强连通分量
    强连通分量一、强连通分量1.DFS森林和强连通分(1)DFSForestTreeEdge指树边BackEdge指连向祖先的边(返祖边)ForwardEdge指连向子孙的边(前向边,它主要是在搜索的时候遇到了一个已经访问过的结点,但是这个结点并不是当前结点的祖先。)CrossEdge指连向树其他分支的边(横......
  • 图论选做
    P3465[POI2008]CLO-Toll[基环树][并查集][提高+/省选-]考虑依照题意,只要有一个环并且图连通,就能满足每个点在一些边定向后,都有为1的入度。即选择一些边构成一个外向基环树,就可以满足题意solution:先跑出一棵生成树找一条非树边(这样就能找到一个环),并对这个环定向然后依......