强连通分量
Keep_Trying_Go
无
展开
-
HDU4635(强连通分量+Kosaraju算法)
题意:给出一个有向图,最多添加多少条边使这个图依然不是强连通图;当这个图是强连通图时,输出-1; 求解思路:强连通分量求解: 强连通图:在有向图中,任意节点除法都可以到达其余所有节点,则称为强连通图。 强连通分量:在非强连通图的有向图中,选取部分点为强连通图,该强连通子图称为强连通分量 方法一: #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include&原创 2021-05-12 22:58:38 · 161 阅读 · 0 评论 -
HDU3072(Kosaraju算法)
题意:给出一个有向图,并且给出从X->Y之间的权值(也是cost),要求出强连通分量之间的最小边权,最后将求出的强连通分量之间的权值相加。 Kosaraju算法: 算法思路: 步骤1:对正向图(原图)进行dfs求解得到正向图中各节点的拓扑序并且存在数组vs中。 步骤2:得到拓扑序之后,对反向图按照逆拓扑序进行rdfs,每次rdfs都得到一个强连通分量。 注意:在进行第一步的dfs之后,将数组vis清空。 注解:Map数组记录正向图,rMap数组记录反向图,flag数组标记属于哪个连通分量,vis数组标原创 2021-05-12 21:39:33 · 190 阅读 · 0 评论 -
poj3352(强连通分量)
题意:添加多少边才能使这个无向图为双连通分量。 注意:双连通分量适用于无向图;而强连通分量适用于有向图。但是这两个概念都是一样的。 #include<iostream> #include<algorithm> #include<cmath> #include<cstring> #include<cstdio> #include<vector> #include<stack> using namespace std; cons原创 2021-04-21 09:21:11 · 246 阅读 · 0 评论 -
poj2553(强连通分量)
题意:给出有向图,图的底部是所有汇节点的子集,即,底部(G)={v∈V\x-∀w∈V:(v→w)⇒(w→v)},w在……里面G可以从v, v也可从w。让我们求有多少个点是绘点的问题。 思路:先求解出强连通分量,然后将求得的强连通分量看成是一个新点,进行缩点,要求绘点,那么求出这些新点中出度为零的点即可,最后从N个点中找出绘点并记录输出即可。 定义: 强连通图:在有向图中,任意节点除法都可以到达其余所有节点,则称为强连通图。 强连通分量:在非强连通图的有向图中,选取部分点为强连通图,该强连通子图称为强连通分量原创 2021-04-21 09:13:27 · 231 阅读 · 0 评论 -
poj2186(强连通分量)
思路:找出出度为0 的顶点,如果出度为0的顶点大于1,则解为零,否则解就是出度为零的顶点的连通分支数。 刚开始是没有理解这道题的,也是看了大神之后才理解的。 #include<iostream> #include<algorithm> #include<cmath> #include<cstring> #include<cstdio> #include<vector> #include<stack> using namesp原创 2021-04-21 00:26:14 · 334 阅读 · 0 评论 -
poj1236(强连通分量)
题意: (1).至少需要向多少个学校发放软件,要使这个网络中的所有学校都能得到软件 (2).至少需要添加多少条边,才能使这个网络成为一个强连通分量图。 思路:首先求解强连通分量,如果不是同一个强连通分量,则将入度indegree[blong[v]]++,outdegree[blong[i]]++。在这些强连通分量中如果入度为零,则需要发放ans1个软件,问题的求解。问题2的求解是求这个max(ans1,ans2). 强连通图:在有向图中,任意节点除法都可以到达其余所有节点,则称为强连通图。 强连通分量:在非原创 2021-04-20 22:07:11 · 266 阅读 · 0 评论 -
HDU5934(强连通分量)
题意:主要在诈弹爆炸的范围内如果存在其他的诈弹,那么在周围的诈弹也将会被引爆,这样思路就可以想到强连通分量了; 思路:先求解强连通分量,在找到强连通分量时,也求解出这个强连通分量的最小费用mincost[ans]=min(mincost[ans],num[v].c);求解完强连通分量之后,将强连通分量看成一个点,再求解各个强连通分量的入度,当入度为零的时候,代表这个强连通分量其他的强连通分量之间是分开的,意味着不能被其他的诈弹引爆,即执行操作ans1+=mincost[i]. #include<ios原创 2021-04-20 21:06:16 · 176 阅读 · 0 评论 -
HDU2767(强连通分量+Kosaraju算法)
题意:需要加多少边才能把一个图变成强连通分量 强连通图:在有向图中,任意节点除法都可以到达其余所有节点,则称为强连通图。 强连通分量:在非强连通图的有向图中,选取部分点为强连通图,该强连通子图称为强连通分量。 求出强连通分量可以进行缩点操作。 首先我们先用tarjan缩点,把一些强连通集合变成一个点,然后求这些点的出度和入度,当入度或者出度为0时,表明两个强连通分量需要加边,形成强连通分量,最后求出最大的即可。 #include<iostream> #include<algorithm&g原创 2021-04-20 16:56:08 · 213 阅读 · 0 评论 -
HDU1827(强连通分量)
强连通图:在有向图中,任意节点除法都可以到达其余所有节点,则称为强连通图。 强连通分量:在非强连通图的有向图中,选取部分点为强连通图,该强连通子图称为强连通分量。 注意:这道题只给出的是Wiskey和其他n个人之间联系需要花费,如果Wiskey联系u,u联系v之间是不需要花费的;而且之间的联系是单向的。 #include<iostream> #include<algorithm> #include<cmath> #include<cstring> #inclu原创 2021-04-20 16:08:52 · 252 阅读 · 0 评论 -
HDU1269(强连通分量)
强连通图:在有向图中,任意节点除法都可以到达其余所有节点,则称为强连通图。 强连通分量:在非强连通图的有向图中,选取部分点为强连通图,该强连通子图称为强连通分量 #include<iostream> #include<algorithm> #include<cmath> #include<cstring> #include<cstdio> #include<vector> #include<stack> using name原创 2021-04-20 15:33:14 · 200 阅读 · 0 评论