Tarjan强连通分量(scc)】的更多相关文章

一.强连通分量定义 有向图强连通分量在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.有向图的极大强连通子图,称为强连通分量(strongly connected components)SCC. 以上是摘自百科的一段对有向图强连通图分量的形式化定义.其实不难理解,举个例子 如上图,{a,b,c,d}为一个强连通分量,…
强连通分量SCC 2-SAT 部分资料来自: 1.https://blog.csdn.net/whereisherofrom/article/details/79417926 2.https://baike.baidu.com/item/%E5%BC%BA%E8%BF%9E%E9%80%9A%E5%88%86%E9%87%8F/7448759?fr=aladdin 定义 在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个…
Tarjan 强连通分量 及 双联通分量(求割点,割边) 众所周知,Tarjan的三大算法分别为 (1)         有向图的强联通分量 (2)         无向图的双联通分量(求割点,桥) (3)         最近公共祖先 今天主要给未来的自己讲解一下前两个应用,让未来的自己不会向现在的自己一样又忘了Tarjan怎么写.熟悉DFS的话,理解起来会简单很多. (1)         有向图的强联通分量 首先解释Tarjan中几个比较重要的值 DFN[i] : 节点i被访问到的次序 L…
友好城市 [问题描述]小 w 生活在美丽的 Z 国. Z 国是一个有 n 个城市的大国, 城市之间有 m 条单向公路(连接城市 i. j 的公路只能从 i 连到 j). 城市 i. j 是友好城市当且仅当从城市 i 能到达城市 j 并且从城市 j 能到达城市 i. 如果 k 个城市两两互为友好城市, 那么我们称这 k 个城市是友好城市群, k 为友好城市群的大小. 现在小 w 想知道友好城市群的大小最大为多少, 你能告诉他吗? [输入格式]第一行包含两个整数 n 和 m.接下来 m 行, 每行两…
题目大意:CodeVs2822的简单版本 传送门 $Tarjan$强连通分量+缩点,若连通块的个数等于一则输出n:若缩点后图中出度为0的点个数为1,输出对应连通块内的点数:否则输出0: 代码中注释部分是调了半个小时没发现有错的地方... #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> #include<cctype> #define foru(i,x,y…
定义: 在有向图中,如果一些顶点中任意两个顶点都能互相到达(间接或直接),那么这些顶点就构成了一个强连通分量,如果一个顶点没有出度,即它不能到达其他任何顶点,那么该顶点自己就是一个强连通分量. 做题的总结吧算是: 1.给定一个有向图,求有多少个顶点是由任何顶点出发都可达的: 图中只有一个出度为0的点,那么它一定可以由任意点出发可达.SCC缩点后,DFS. 2.至少要选几个顶点,才能做到从这些顶点出发,可以到达全部顶点. 任何入度不为0的点,一定可以由某个入度为0的点出发可达. 3.有向无环图中,…
题意: 求出度为0的强连通分量. 思路: 缩点 具体有两种实现: 1.遍历所有边, 边的两端点不在同一强连通分量的话, 将出发点所在强连通分量出度+1. #include <cstdio> #include <cstring> #include <stack> #include <algorithm> using namespace std; //0.03s 4856K const int MAXN = 5005; struct Pool { int pre…
题意:(当时没看懂...) N个王子和N个女孩, 每个王子喜欢若干女孩. 给出每个王子喜欢的女孩编号, 再给出一种王子和女孩的完美匹配. 求每个王子分别可以和那些女孩结婚可以满足最终每个王子都能找到一个自己喜欢的女孩结婚.(需要避免的情况就是某个王子和自己喜欢的某个女孩结婚之后使得最终无法找到一个完美匹配) 思路:(非独立思考想出...) 将初始的每个完美匹配视为1个节点, u -> v表示u中的王子喜欢v中的女孩, 求这样一个图的强连通分量. 输出每个王子喜欢的,并且和他所在节点在同一个强连通…
功能:输入一个N个点,M条单向边的有向图,求出此图全部的强连通分量 原理:tarjan算法(百度百科传送门),大致思想是时间戳与最近可追溯点 这个玩意不仅仅是求强连通分量那么简单,而且对于一个有环的有向图可以有效的进行缩点(每个强连通分量缩成一个点),构成一个新的拓扑图(如BZOJ上Apio2009的那个ATM)(PS:注意考虑有些图中不能通过任意一个单独的点到达全部节点,所以不要以为直接tarjan(1)就了事了,还要来个for循环,不过实际上复杂度还是O(M),因为遍历过程中事实上每个边还是…
题意: 给一些集合 要求证明所有集合是相同的 证明方法是,如果$A∈B$,$B∈A$那么$A=B$成立 每一次证明可以得出一个$X∈Y$ 现在已经证明一些$A∈B$成立 求,最少再证明多少次,就可以完成要求 分析 其实就等价于给一个有向图,问你再加入多少个边可以使得图变为强连通图 给一个图论经典结论: "对于一个有向无环图(DAG),若想让它成为强连通图,至少需要添加$max(a,b)$条边 $a$为入度为0的点的数量,$b$为出度为0的点的数量" 而对于一个有向图,其每个强连通分量都…