1.无向图:连通,连通图,连通分量,双连通分量
2. 有向图:强连通,强连通图,强连通分量

无向图求割边(桥)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
#define pir pair<int,int>
#define MP make_pairint n,m;//n个点,m条边
int cnt; //割边数目
int step;//搜索顺序
int dfn[100005],low[100005];
vector<int>vec[100005];//图void tarjan(int x,int y){dfn[x] = low[x] = ++step;for(int i = 0; i < vec[x].size(); i++){int v = vec[x][i];if(!dfn[v]){//没有访问过trajan(v,x);low[x] = min(low[x],low[v]);//子节点可能比父节点可以返回到更远的祖先if(low[v] > dfn[x]) cnt++; //判断是否为桥}else if(v != y){//访问(过)的点不是x的父节点low[x] = min(low[x],dfn[v]);}}
}int main(){cnt = 0;step = 0;cin >> n >> m;int x,y;for(int i = 0; i < m; i++){cin >> x >> y;vec[x].push_back(y);vec[y].push_back(x);}tarjan(1,0);cout << m - cnt << endl;
}

求连通分量

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
#define pir pair<int,int>
#define MP make_pair
vector<int> G[100005];int dfn[100005], low[100005];
int instk[100005],color[100005];//color染色 instk是否在栈里
int sig;//sig表示连通分量的个数
int step; //搜索顺序值
int n,m;
stack<int> stk;
void tarjan(int u, int fa) {dfn[u] = low[u] = ++step;stk.push(u);instk[u] = true;for(int i = 0; i < G[u].size(); i++) {int v = G[u][i];if(v == fa) continue ;//无向图中子节点和父节点不能看成是环if(!dfn[v]) {tarjan(v, u);low[u] = min(low[u], low[v]);} else if(instk[v]) {low[u] = min(low[u], dfn[v]);}}if(low[u] == dfn[u]) { //发现一个连通分量int x = 0;sig ++; //scc计数+1while(x != u) {x = stk.top(); stk.pop();color[x] = sig; //染色instk[x] = false;}}
}int main(){step = 0;cin >> n >> m;int x,y;for(int i = 0; i < m; i++){cin >> x >> y;G[x].push_back(y);G[y].push_back(x);}tarjan(1,0);//题目如果没有说一定是连通的则需要下面这两行代码// for(int i=1; i<=n; i++)//    if(!dfn[i]) tarjan(i, -1);int ans = 0;//求非割边for(int i = 1; i <= n; i++){for(int k = 0; k < G[i].size(); k++){x = color[i]; y = color[G[i][k]];if(x == y) ans++;}}cout << ans / 2 << endl;
}

Trajan求割边,强连通分量相关推荐

  1. 【算法】设计算法求所有强连通分量的完整代码(kosaraju算法)

    代码: typedef struct anode {int adjvex;//该边的邻接点编号struct anode* nexarc;//指向下一条边的指针int weight;//该边的相关信息, ...

  2. 对用2遍dfs求有向图强连通分量的理解

    第一遍dfs是对原图进行,求出每个结点的后序遍历顺序,也叫时间戳,注意保存方式,应该是保存每个时间点的访问的结点,而不是保存每个结点的访问时间: 第二遍dfs是对逆图进行,根据第一遍dfs的结果,首先 ...

  3. POJ2186——并查集+Tarjan算法求强连通分量

    算法讨论:这题陷阱比较多.首先,被所有牛欢迎,这说明所有的牛都要在一个连通图中,也就是将所给的边看成无向边的时候,所有点要在一个连通图中.这个我们用并查集来实现就可以了.强连通分量的求法就很简单了,正 ...

  4. P1262 间谍网络 (Tarjan 求强连通分量)

    题目传送门:https://www.luogu.com.cn/problem/P1262 题意 题意转换成图的角度理解,给出初始可以访问的节点 D i D_i Di​ 以及访问这些节点需要的代价 W ...

  5. Tarjan算法应用 (割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)问题)...

    转载自:http://hi.baidu.com/lydrainbowcat/blog/item/2194090a96bbed2db1351de8.html 基本概念: 1.割点:若删掉某点后,原连通图 ...

  6. 有向图强连通分量的三种算法

    一.     Kosaraju算法 1.      算法思路 基本思路: 这个算法可以说是最容易理解,最通用的算法,其比较关键的部分是同时应用了原图G和反图GT.(步骤1)先用对原图G进行深搜形成森林 ...

  7. tarjan算法(强连通分量与割点)

    tarjan算法可以求有向图的割点割边强连通分量(还有一些奇奇怪怪的操作) 我只会割点和强连通分量,割边(和缩点)以后可能会加,如果是来看割边的话,现在跑还来得及.. (先来一张有向图叭) 用这张图, ...

  8. poj2553(强连通分量)

    题意:给出有向图,图的底部是所有汇节点的子集,即,底部(G)={v∈V\x-∀w∈V:(v→w)⇒(w→v)},w在--里面G可以从v, v也可从w.让我们求有多少个点是绘点的问题. 思路:先求解出强 ...

  9. poj1236(强连通分量)

    题意: (1).至少需要向多少个学校发放软件,要使这个网络中的所有学校都能得到软件 (2).至少需要添加多少条边,才能使这个网络成为一个强连通分量图. 思路:首先求解强连通分量,如果不是同一个强连通分 ...

  10. HDU2767(强连通分量+Kosaraju算法)

    题意:需要加多少边才能把一个图变成强连通分量 强连通图:在有向图中,任意节点除法都可以到达其余所有节点,则称为强连通图. 强连通分量:在非强连通图的有向图中,选取部分点为强连通图,该强连通子图称为强连 ...

最新文章

  1. 【力扣网练习题】罗马数字转整数
  2. 独家 | R语言中K邻近算法的初学者指南:从菜鸟到大神(附代码&链接)
  3. 《Nmap渗透测试指南》—第1章1.2节Windows下安装Nmap
  4. php 替换 乱码,php文字替换出现乱码
  5. 解决kindeditor在线编辑器 过滤dl、dd、dt的两种方法
  6. 【python教程入门学习】六、python中字符串的常用方法
  7. 感谢贫穷,是贫穷限制了人们的善良
  8. 直播平台常见直播礼物介绍
  9. SPSS数据分析之多选题定义
  10. UWP开发:APP之间的数据交互(以微信为例)
  11. 京东云VPC对等连接(VPC Peering)
  12. AndroidStudio 导出AAB格式上传谷歌提示超过150M 解决方案
  13. 19、论文解读:Intensity Scan Context: Coding Intensity and Geometry Relations for Loop Closure Detection
  14. 前端实现pdf文件的在线预览与下载
  15. 2018 icpc 焦作站现场赛 E题题解
  16. (64)-- 爬取58同城网页信息
  17. JavaScript里面的“类”
  18. 快手视频批量采集 php,【原创开源】快手爬虫,根据eid批量爬取用户的所有图集和视频【已失效】...
  19. 【Python】读书笔记:Python基础教程-项目1-即时标记
  20. Apsara Clouder基础技能认证:实现调用API接口

热门文章

  1. 宁芝84静电容(蓝牙双模)键盘说明书
  2. 因为计算机中丢失lua.dll,lua51.dll丢失修复
  3. pandas计算相关系数
  4. Google Chrome如何恢复误删除书签和文件夹
  5. linux 命令两个冒号,为什么两个冒号的错误消息作为bash中的命令(::)有三个冒号,但是一个冒号没有输出?...
  6. 皮克定理和任意多边形的面积公式
  7. 三星手机使用应用沙盒动态修改sdk数据
  8. linux PCI/PCIe驱动之pci_read_bases的理解
  9. 使用 乐吾乐topology 遇到的问题解决方法汇总
  10. python考勤统计_公司HR统计考勤用这个函数公式,快速、准确完成,再也不加班了...