CSP认证201509-4 高速公路[C++题解]:强连通分量、tarjan算法模板题
题目分析
来源:acwing
分析:
所求即为强连通分量的个数,然后计算每个强连通分量中点的个数,相加即可。
所谓强连通分量,它是一个子图,其中任意两点可以相互到达,并且再加一个点,就不能满足任意两点能够互相到达,所以它是一个极大子图。
求强连通分量,以及每个强连通分量中点的数量,有tarjan算法,所以这题是一道模板题。
直接背模板,就可以拿全分。
tarjan算法模板请参考笔者的博文:
算法提高课-图论-有向图的强连通分量-AcWing 1174. 受欢迎的牛:tarjan算法求强连通分量、tarjan算法板子、强连通图
ac代码
#include<bits/stdc++.h>
using namespace std;
const int N = 10010, M = 100010;
int n, m;
int h[N],e[M], ne[M], idx;
int stk[N],top;
int dfn[N], low[N], timestamp;
bool in_stk[N];
int ans;void add(int a, int b){e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}void tarjan(int u){dfn[u] = low[u] = ++ timestamp;stk[ ++ top] = u, in_stk[u] = true;for(int i = h[u]; ~i; i = ne[i]){int j = e[i];if(!dfn[j]){tarjan(j);low[u] = min(low[u], low[j]);}else if( in_stk[j])low[u] = min(low[u], dfn[j]);}if(dfn[u] == low[u]){int y, cnt = 0;do{y = stk[top--];in_stk[y] = false;cnt++;}while(y != u);ans += (cnt -1)* cnt /2;}
}int main(){cin >> n >> m;while(m --){int a, b;cin >> a >> b;add( a, b);}for(int i = 1; i <= n; i ++)if(!dfn[i]) tarjan(i);cout << ans << endl;
}
题目链接
https://www.acwing.com/problem/content/3223/
CSP认证201509-4 高速公路[C++题解]:强连通分量、tarjan算法模板题相关推荐
- 强连通分量(Tarjan算法)和缩点
强连通分量(Tarjan算法)和缩点 一些定义 给定一张有向图,对于图中任意两个节点 xxx 和 yyy ,存在从 xxx 到 yyy 的路径,也存在从 yyy 到 xxx 的路径,则称该有向图为强连 ...
- 强连通分量(Tarjan算法) 图解
强连通分量(Tarjan算法) 前言 第一件事:没事不要while(m–),会带来不幸 第二件事:看博客先看看评论,如果博主他写错了的话- 简介 先讲几个定义 强连通:两个顶点 uuu,vvv 可以相 ...
- 有向图强连通分量tarjan算法
转自:http://www.byvoid.com/blog/scc-tarjan/ http://blog.csdn.net/geniusluzh/article/details/6601514 在有 ...
- 图之强连通、强连通图、强连通分量 Tarjan算法
一.解释 在有向图G中,如果两个顶点间至少存在一条互相可达路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极大强 ...
- 有向图的强连通分量--Tarjan算法---代码分析
本文就是做个代码分析,顺便说下理解. 一.预备知识: 需要知道什么是: 回边.前向边.交叉边 二.上代码: #include<algorithm> #define NIL -1using ...
- 强连通分量——tarjan算法缩点
一. 什么是强连通分量? 强连通分量:在有向图G中,如果两个顶点u,v间(u->v)有一条从u到v的有向路径,同时还有一条从v到u的有向路径,则称两个顶点强连通(strongly connect ...
- 求无向图的连通分量或有向图的强连通分量—tarjan()ccf高速公路
概念定义: 在图论中,连通图基于连通的概念. 1. 连通(无向图): 若顶点Vi能通过路径到达Vj,那么称为Vi和Vj是连通的 对无向图:若从顶点Vi到顶点Vj有路径相连(当然从j到i也一定有路径), ...
- CSP认证201509-2 日期计算[C++题解]:枚举、模拟
题目分析 来源:acwing 分析: 主要是判断2月多少天.然后就是遍历每个月,依次减去当前月的天数,发现days还剩多少天就是当月几号. 其实这里是背的模板,日期题模板更难一点的题目是 CSP认证 ...
- CSP认证201503-4 网络延时[C++题解]:树的直径
题目分析 来源:acwing 分析: 树的直径的概念: 树上最远的两个节点之间的距离就被称为树的直径,连接这两点的路径被称为树的最长链. 类似于圆的直径的概念:圆上直线距离最远的两个点构成直径. 这是 ...
最新文章
- 近10年数据智能团队建设,联想总结了由内而外的发展经验 | 专访联想集团副总裁田日辉...
- Java注解学习笔记
- 移动端开发, 常用CSS单位
- 如何在Exchange中处理不能发送的信息?
- 《MonoTouch开发实践指南》一3.6 小结
- 音乐播放类应用后台播放耗电评测报告
- oracle0数据库论文总结,大学oracle数据库总结(考试必备)
- c ++类成员函数_仅使用C ++创建具有公共数据成员的类
- mysql 1215_mysql执行带外键的sql文件时出现mysql ERROR 1215 (HY000): Cannot add foreign key constraint的解决...
- 服务器上的安全数据没有此工作站信任关系的计算机账户_综合监控系统等级保护安全解决方案...
- gzip: File too large错误
- matlab广义误差分布,基于Copula函数的多源径流预报误差联合分布研究
- Windows下如何强制删除文件夹及文件的命令
- Java数字转化为阿拉伯数字_Java实现中文数字转换为阿拉伯数字
- 高通camera结构(摄像头基础介绍)
- 火绒卸载之后的残留文件夹问题
- 《OD学Oozie》20160807Oozie
- openlayers3中geowebcache的使用
- 2020一级计算机考证
- Online PDF to PNG, PDF to JPEG, PDF to WEBP, PDF to TXT - toolfk程序员在线工具网