SWUST OJ1065 无向图的连通分量计算】的更多相关文章

无向图的连通分量计算 5000(ms) 10000(kb) 2555 / 5521 假设无向图G采用邻接矩阵存储,编写一个算法求连通分量的个数. 输入 第一行为一个整数n,表示顶点的个数(顶点编号为0到n-1),接下来是为一个n*n大小的整数矩阵,表示图的邻接关系.数字为0表示不邻接,1表示不邻接. 输出 连通分量的个数. 样例输入 5 0 1 0 1 1 1 0 1 1 0 0 1 0 1 1 1 1 1 0 1 1 0 1 1 0 样例输出 1 本题利用深度优先搜索(dfs)从每个顶点开始搜…
文字描述 对无向图进行遍历时,对于连通图,仅需从图中任一顶点出发,进行深度优先搜索或广度优先搜索,便可访问到图中所有顶点.但对非连通图,则需从多个顶点出发搜索,每一次从一个新的起始点出发进行搜索过程得到的顶点访问序列恰为其各个连通分量中的顶点集. 对于非连通图,每个连通分量中的顶点集,和遍历时走过的边一起构成若干棵生成树,这些连通分量的生成树组成非连通图的生成森林. 示意图 算法分析 求无向图的连通分量的生成森林的算法时间复杂度和遍历相同. 代码实现 //1.建立无向图 //2.建立无向图的深度…
题目链接 题意:n条隧道由一些点连接而成,其中每条隧道链接两个连接点.任意两个连接点之间最多只有一条隧道.任务就是在这些连接点中,安装尽量少的太平井和逃生装置,使得不管哪个连接点倒塌,工人都能从其他太平井逃脱,求最少安装数量和方案. 分析:本题相当于在一张无向图上选择尽量少的点涂黑(对应太平井),使任意一个点被删除后,每个连通分量都至少还有一个黑点.不同的连通分量最多有一个公共点即割点,将割点涂上是不划算的,因为删除割点后,要保证每个连通分量还要有黑点,所以还要在其他的连通分量中涂黑点,如果不涂…
不是标题党,之前我也写过一篇比较全的,但是对于初学者不友好.传送门? 双连通分量(Biconnected component):     1.边双联通 E-BCC     2.点双连通 V-BCC 双连通分量分为点双连通(V-BCC)和边双连通(E-BCC),这是图论学习中一个很重要的知识点,也是图的变形转化的一个主要方法.通过V-BCC缩点可以求割边(桥),也可以通过E-BCC缩点求割点.这是我们今天讲的主要的内容. 1.边双连通分量 先说不好理解的定义:若一个无向图的点两两间都有两条不重合的…
题目链接:http://acm.swust.edu.cn/problem/643/ Time limit(ms): 1000 Memory limit(kb): 65535   Description 一个n阶方阵A行列式记作detA,或者|A|.detA是一个数字,它的值按照下面的方式递归定义: 如果n=1,detA=a11; 如果n>1,detA= s1 *a11*detA1+s2 * a12 *detA2 +......+sn * a1n *det An 一个上三角矩阵的行列式等于主对角线…
https://vjudge.net/problem/Gym-100676H 题意: 给出一个n个城市,城市之间有距离为w的边,现在要选一个中心城市,使得该城市到其余城市的最大距离最短.如果有一些城市是强连通的,那么他们可以使用传送门瞬间到达. 思路:因为强连通时可以瞬移,因为是无向图,所以计算边双连通分量然后重新建图,这样,也就不存在环了. 接下来,计算一下树的直径,因为中心城市肯定选在树的直径上,这样才有可能使最大的边最短. #include<iostream> #include<a…
题目链接: http://poj.org/problem?id=2117 题目大意:在一个非连通图中,求一个切除图中任意一个割点方案,使得图中连通分量数最大. 解题思路: 一个大陷阱,m可以等于0,这时候要特判,结果就是n-1. 同时出题者脑子秀逗了,也不给C的范围.我开了两倍点大小RE了,于是怒开了五倍点大小才A了. 本题不是连通图,需要先计算原始图中的连通分量.方法就是dfs染色. 然后dfs求割点. 之后枚举割点,由于是非连通图,所以连通分量数=原始分量数+block-1. -1的原因是,…
和无向图的连通分量类似,有向图有“强连通分量”的说法.“相互可达”的关系在有向图中也是等价关系.每一个集合称为有向图的一个强连通分量(scc).如果把一个集合看成一个点,那么所有的scc构成了一个scc图.这个scc图不会存在任何有向环,因此是一个DAG.求解有向图强连通分量的算法一般都是基于dfs的,常用的算法有Kosaraju算法和Tarjan算法,下面给出Tarjan算法的代码: vector<int> G[maxn]; int pre[maxn], low_link[maxn], sc…
http://www.2cto.com/kf/201109/105758.html 算法大全(C,C++)一. 数论算法 1.求两数的最大公约数function gcd(a,b:integer):integer;beginif b=0 then gcd:=aelse gcd:=gcd (b,a mod b);end ; 2.求两数的最小公倍数function lcm(a,b:integer):integer;beginif a<b then swap(a,b);lcm:=a;while lcm…
  一.数论算法 1.求两数的最大公约数 2.求两数的最小公倍数 3.素数的求法 A.小范围内判断一个数是否为质数: B.判断longint范围内的数是否为素数(包含求50000以内的素数表): 二.图论算法 1.最小生成树 A.Prim算法: B.Kruskal算法:(贪心) 按权值递增顺序删去图中的边,若不形成回路则将此边加入最小生成树. 2.最短路径 A.标号法求解单源点最短路径: B.Floyed算法求解所有顶点对之间的最短路径: C. Dijkstra 算法: 3.计算图的传递闭包 4…