连通分量

专题训练之双连通

蹲街弑〆低调 提交于 2020-03-29 07:45:11
桥和割点例题+讲解:hihocoder1183 http://hihocoder.com/problemset/problem/1183 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<vector> 5 #include<set> 6 using namespace std; 7 const int maxn=1005; 8 const int maxm=200010; 9 struct edge{ 10 int to,nxt; 11 bool cut; 12 }edge[maxm*2]; 13 int head[maxn],tot; 14 int low[maxn],dfn[maxn]; 15 int index,n,bridge; 16 set<int>st; 17 bool cut[maxn]; 18 19 void addedge(int u,int v) 20 { 21 edge[tot].to=v; 22 edge[tot].nxt=head[u]; 23 edge[tot].cut=false; 24 head[u]=tot++; 25 } 26 27 void tarjan(int u,int pre) 28 { 29 low[u]=dfn[u]=++index; 30

cs224w:slide11---PageRank(上)

最后都变了- 提交于 2020-03-10 05:14:21
一、Web 问:从全球范围来看,网络是什么样子? 网络可以表示成一个有向图, Node:网页(Web Page) Edge :超链接(hyperlink) 给定节点 v v v ,它能够到达哪些节点?又有哪些节点能够到达 v v v ? I n ( v ) = { w ∣ w 能 够 到 达 v } In(v)=\{ w|w 能够到达 v\} I n ( v ) = { w ∣ w 能 够 到 达 v } O u t ( v ) = { w ∣ v 能 够 到 达 w } Out(v)=\{ w|v 能够到达 w\} O u t ( v ) = { w ∣ v 能 够 到 达 w } 两种类型的有向图: 强连接的(strong connected):任何一个顶点都能够沿着一条有向路径到达另一个节点。 有向非循环图(directed acyclic graph):节点 u 能到达节点 v ,但是节点 v 却不能到达节点 u; 二、知识回顾 1. 连通图与强连通图: 在无向图G中 ,若任意两个不同的顶点 v i v_i v i ​ 和 v j v_j v j ​ 都连通(即有路径),则称G为连通图(Connected Graph). 在有向图G中 ,如果两个顶点 v i v_i v i ​ 和 v j v_j v j ​ 间有一条从 v i v_i v i ​ 到 v j v_j v

【转载】连通图——详细解释

亡梦爱人 提交于 2020-02-16 12:43:09
文章目录 连通分量 强连通图 总结 总结 前面讲过,图中从一个顶点到达另一顶点,若存在至少一条路径,则称这两个顶点是连通着的。例如图 1 中,虽然 V1 和 V3 没有直接关联,但从 V1 到 V3 存在两条路径,分别是 V1-V2-V3 和 V1-V4-V3,因此称 V1 和 V3 之间是连通的。 图 1 顶点之间的连通状态示意图 无向图中,如果任意两个顶点之间都能够连通,则称此无向图为连通图。例如,图 2 中的无向图就是一个连通图,因为此图中任意两顶点之间都是连通的。 图 2 连通图示意图 连通分量 若无向图不是连通图,但图中存储某个子图符合连通图的性质,则称该子图为连通分量。 前面讲过,由图中部分顶点和边构成的图为该图的一个子图,但这里的子图指的是图中"最大"的连通子图(也称"极大连通子图")。 如图 3 所示,虽然图 3a) 中的无向图不是连通图,但可以将其分解为 3 个"最大子图"(图 3b)),它们都满足连通图的性质,因此都是连通分量。 图 3 连通分量示意图 提示,图 3a) 中的无向图只能分解为 3 部分各自连通的"最大子图"。 需要注意的是,连通分量的提出是以"整个无向图不是连通图"为前提的,因为如果无向图是连通图,则其无法分解出多个最大连通子图,因为图中所有的顶点之间都是连通的。 强连通图 有向图中,若任意两个顶点 Vi 和 Vj,满足从 Vi 到 Vj 以及从

数据结构实验:连通分量个数

主宰稳场 提交于 2020-02-15 23:31:15
Description 在无向图中,如果从顶点vi到顶点vj有路径,则称vi和vj连通。如果图中任意两个顶点之间都连通,则称该图为连通图, 否则,称该图为非连通图,则其中的极大连通子图称为连通分量,这里所谓的极大是指子图中包含的顶点个数极大。 例如:一个无向图有5个顶点,1-3-5是连通的,2是连通的,4是连通的,则这个无向图有3个连通分量。 Input 第一行是一个整数T,表示有T组测试样例(0 < T <= 50)。每个测试样例开始一行包括两个整数N,M,(0 < N <= 20,0 <= M <= 200) 分别代表N个顶点,和M条边。下面的M行,每行有两个整数u,v,顶点u和顶点v相连。 Output 每行一个整数,连通分量个数。 Sample Input 2 3 1 1 2 3 2 3 2 1 2 Output 2 1 Hint # include <iostream> # include <bits/stdc++.h> int father [ 202 ] ; int findFather ( int x ) { while ( x != father [ x ] ) x = father [ x ] ; return x ; } void Union ( int x , int y ) { int fatherX = findFather ( x ) ; int

最小生成树的Kruskal算法

自闭症网瘾萝莉.ら 提交于 2020-02-13 13:54:54
库鲁斯卡尔(Kruskal)算法是一种按照连通网中边的权值递增的顺序构造最小生成树的方法。Kruskal算法的基本思想是:假设连通网G=(V,E),令最小生成树的初始状态为只有n个顶点而无边的非连通图T=(V,{}),图中每个顶点自成一个连通分量。在E中选择权值最小的边,若该边依附的顶点落在T中不同的连通分量中,则将此边加入到T中;否则,舍去此边而选下一条权值最小的边;依次类推,直到T中所有顶点都在同一个连通分量上(此时含有n-1边)为止,这时的T就是一棵最小的生成树。 注意,初始时T的连通分量为顶点个数n,在每一次选取最小权值的边加入到T时一定要保证T的连通分量减1;也即选取最小权值边所连接的两个顶点必须位于不同的连接分量上,否则应舍去此边而再选取下一条最小权值的边。 概述 实现Kruskal算法的关键是如何判断所选取的边是否与生成树中已保留的边形成回路,这可通过判断边的两个顶点所在的连通分量的方法来解决.为此设置一个辅助数组vest(数组元素下标为0~n-1),它用于判断两个顶点集合(即两个连通分量),此时按其中的一个集合编号重新统一编号(即合并成一个连通分量)。因此,当两个顶点的集合(连通分量)编号不同时,则加入这两个顶点所构成的边到最小生成树中就一定不会形成回路,因为这两个顶点分属于不同的连通分量。 在实现Kruskal算法时,需要用一个数组E来存放图G中是所有边

上白泽慧音 - C++

霸气de小男生 提交于 2020-02-09 03:27:44
上白泽慧音 题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师。春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄。因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点。人间之里由N个村庄(编号为1…N)和M条道路组成,道路分为两种一种为单向通行的,一种为双向通行的,分别用1和2来标记。如果存在由村庄A到达村庄B的通路,那么我们认为可以从村庄A到达村庄B,记为(A,B)。当(A,B)和(B,A)同时满足时,我们认为A,B是绝对连通的,记为<A,B>。绝对连通区域是指一个村庄的集合,在这个集合中任意两个村庄X,Y都满足<X,Y>。现在你的任务是,找出最大的绝对连通区域,并将这个绝对连通区域的村庄按编号依次输出。若存在两个最大的,输出字典序最小的,比如当存在1,3,4和2,5,6这两个最大连通区域时,输出的是1,3,4。 输入格式 第1行:两个正整数N,M 第2…M+1行:每行三个正整数a,b,t, t = 1表示存在从村庄a到b的单向道路,t = 2表示村庄a,b之间存在双向通行的道路。保证每条道路只出现一次。 输出格式 第1行: 1个整数,表示最大的绝对连通区域包含的村庄个数。 第2行:若干个整数,依次输出最大的绝对连通区域所包含的村庄编号。 输入输出样例 输入 #1 5 5 1 2 1 1 3 2 2 4 2 5 1 2 3 5 1 输出

最小生成树之克鲁斯卡尔(Kruskal)算法

百般思念 提交于 2020-02-05 16:54:56
学习最小生成树算法之前我们先来了解下 下面这些概念: 树 (Tree):如果一个无向连通图中不存在回路,则这种图称为树。 生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的所有顶点的树,则该子图称为G的生成树。 生成树是连通图的极小连通子图。这里所谓极小是指:若在树中任意增加一条边,则将出现一条回路;若去掉一条边,将会使之变成非连通图。 最小生成树 (Minimum Spanning Tree,MST):或者称为最小代价树Minimum-cost Spanning Tree:对无向连通图的生成树,各边的权值总和称为生成树的权,权最小的生成树称为最小生成树。 构成生成树的准则有三条: <1> 必须只使用该网络中的边来构造最小生成树。 <2> 必须使用且仅使用n-1条边来连接网络中的n个顶点 <3> 不能使用产生回路的边。 构造最小生成树的算法主要有:克鲁斯卡尔(Kruskal)算法和普利姆(Prim)算法他们都遵循以上准则。 接下分别讨论一下这两种算法以及判定最小生成树是否唯一的方法。 克鲁斯卡尔算法 克鲁斯卡尔算法的基本思想是以边为主导地位,始终选择当前可用(所选的边不能构成回路)的最小权植边。所以Kruskal算法的第一步是给所有的边按照从小到大的顺序排序。这一步可以直接使用库函数qsort或者sort。接下来从小到大依次考察每一条边(u,v)。

双连通分量

╄→尐↘猪︶ㄣ 提交于 2020-01-26 18:26:44
目录 双连通分量 前置知识 基本概念 点双连通分量 代码 边双连通分量 代码 例题 P3225 矿场搭建 hdu4612 Warm up 双连通分量 前置知识 @FISHER_ —— 强连通分量 @szTom —— 割点和桥 不抄代码的好习惯 基本概念 双连通分量又分点双连通分量和边双连通分量两种。若一个无向图中的去掉任意一个节点(一条边)都不会改变此图的连通性,即不存在割点(桥),则称作点(边)双连通图。一个无向图中的每一个极大点(边)双连通子图称作此无向图的点(边)双连通分量。求双连通分量可用Tarjan算法。——百度 简单来说,一个没有割点(桥)的无向图就是点(边)双连通分量。 以下图为例: 对于这个图来说一共有2个点双连通分量,分别是: (1,2,5),(2,3,4) 有3个边双连通分量,分别是: (1,2,5),(2,3,4),(1,2,3,4,5) 点双连通分量 首先对于一个点双连通分量来说,里面一定没有割点。 所以说当我们查找到一个割点u的时候,就将以u为根的搜索子树内 还不属于任何一个点双连通分量 且 不为割点 或 为割点 但 与那些以u为根的搜索子树内 还不属于任何一个点双连通分量 且 不为割点 的点 直接连通的点 为一个点双连通分量。 简单来说,就是当我们查找到一个割点的时候,我们像 强连通分量 那样让仍在栈内的点成为一个点双连通分量。 最后附上代码: 代码

图的连通性——无向图的连通分量和生成树

心已入冬 提交于 2020-01-09 23:14:50
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1.首先举个实例来说明连通性,看下图: 图G1 上图为非连通图,对上图的连接表进行深度优先搜索遍历,3次调用DFS过程,分别从顶点A,D,G出发,得到的顶点访问序列为: A L M J B F C D E G I K H 上面的3个顶点集和所有依附于这些顶点的边,便构成了非连通图的3个连通分量。 2.设E(G)为连通图G中所有边的集合,则从图中任一顶点出发遍历图时,必定将E(G)分成两个集合T(G)和B(G),其中T(G)是遍历图过程中历经的边的集合;B(G)是剩余边的集合。显然T(G)和图中所有的顶点一起构成连通图G的极小连通子图,又成为连通图的一颗生成树,并且称由深度优先搜索得到的为深度优先生成树;由广度优先搜索得到的为广度优先生成树。 对于非连通图,每个连通分量中的顶点集,和遍历走过的边一起构成若干颗生成树,这些连通分量的生成树组成非连通图的生成树林。 上图G1的深度优先生成树林为: 3.深度优先生成森林的算法 来源: oschina 链接: https://my.oschina.net/u/2263272/blog/1610088

10.4图的连通性(Connectivity)

核能气质少年 提交于 2020-01-07 13:14:50
10.4图的连通性(Connectivity) 如果存在一条路径,使得从u到v,那么顶点u和v就是连通的 如果能存在一条路径从u到u,那么这样的路径称为自环(circuit) 路径可以视作穿过点(through the vertices),也可视为遍历边(traverses the edges) 如果这条路径穿过的边都是一次的(无重复穿过同一条边),那么我们称其为简单路径 图连通 针对于无向图而言,如果任意两个顶点都能够连通,那么称这个图为连通图 定理: 无向连通图的每对顶点都存在简单路径(simple path) 无向图G的连通分量是指G的最大连通子图 割点(cut vertex)或割边(cut edge)能将连通图分为两部分 点连通(Vertex Connectivity) 不可分割图(Nonseparable graphs) 无割点的图称为不可分割图 点割集 去掉点割集V‘后,使得连通图G变为G-V’不再连通 点连通性(Vertex connectivity) 非完全图G的点连通性,指的是存在的点割集的顶点最小数;记为𝜅(G);通俗的说,就是最少去掉多少个点使得G不再是连通图 边连通(Edge Connectivity) 边割集 去掉边割集E‘后,使得连通图G变为G-E’不再连通 边连通性(Edge connectivity) 非完全图G的边连通性