Kosaraju算法 详见《挑战程序设计竞赛》p320 模板: 例题1:POJ 2186 Popular Cows 代码: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath ...
分类:
编程语言 时间:
2017-10-08 14:48:21
阅读次数:
241
强连通分量算法有3个之多,现在介绍这种名字叫做kosaraju算法。 这个算法基于两个事实,1.原图G与逆置图GT拥有相同的强连通分量,这肯定是正确的 2.任意一个子节点存放皆后于父节点,也就是说所有只有当所有子节点都入栈了,父节点才入栈 这种在递归调用之后将顶点入队列的方式叫逆后续排序(rever ...
分类:
编程语言 时间:
2017-09-28 10:01:15
阅读次数:
181
之前一直用的是tarjan第一次学习到这个来试一下。 唔,就是裸的算法,然后如果出度为0的点只有一个,输出这个点的大小。 ...
分类:
编程语言 时间:
2017-09-26 22:25:39
阅读次数:
205
理解 在有向图G中,如果两点互相可达,则称这两个点强连通,如果G中任意两点互相可达,则称G是强连通图。 定理: 1、一个有向图是强连通的,当且仅当G中有一个回路,它至少包含每个节点一次。 2、非强连通有向图的极大强连通子图,称为强连通分量(SCC即Strongly Connected Compone ...
分类:
其他好文 时间:
2017-09-26 11:12:25
阅读次数:
259
芝士: 有向图强连通分量在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量。 如 ...
分类:
其他好文 时间:
2017-09-14 15:01:14
阅读次数:
308
首先定义:强联通分量是有向图G=(V, E)的最大结点集合,满足该集合中的任意一对结点v和u,路径vu和uv同时存在。 kosaraju算法用来寻找强联通分量。对于图G,它首先随便找个结点dfs,求出每个节点最后一次访问的时间戳f(x),然后我们建立反图Gt,接着根据倒序的时间戳来dfs每个节点,每 ...
分类:
移动开发 时间:
2017-09-03 20:17:13
阅读次数:
239
Kosaraju算法,然後bitset優化 主要是學習一下自寫bitset的姿勢 #include<cstring> #include<algorithm> #include<cstdio> #include<cmath> #define rep(i,l,r) for(int i=l;i<=r;i+ ...
分类:
其他好文 时间:
2017-08-21 13:28:52
阅读次数:
150
题目链接:http://poj.org/problem?id=2186 题目大意:给定N头牛和M个有序对(A,B),(A,B)表示A牛认为B牛是红人,该关系具有传递性,如果牛A认为牛B是红人,牛B认为牛C是红人,那么牛A也认为牛C是红人。求被其他所有牛认为是红牛的牛的总数。 解题思路:把所有牛看成顶 ...
分类:
移动开发 时间:
2017-07-27 23:35:28
阅读次数:
301
1.定义连通分量:在无向图中,即为连通子图。上图中,总共有四个连通分量。顶点A、B、C、D构成了一个连通分量,顶点E构成了一个连通分量,顶点F,G和H,I分别构成了两个连通分量。强连通分量:有向图中,尽可能多的若干顶点组成的子图中,这些顶点都是相互可到达的,则这些顶点..
分类:
编程语言 时间:
2017-04-23 23:18:26
阅读次数:
559