
强连通分量
ITCharge
高效率编程,慢节奏生活。
展开
-
POJ2186 Popular Cows【Kosaraju】【强连通分量】
题目大意:每头奶牛都希望自己成为最欢迎的那头牛。给你N头牛,M个崇拜关系(A,B)。意思是牛A崇拜牛B。特别是,如果牛A崇拜牛B,牛B崇拜牛C,那么牛A也崇拜牛C。那么问题来了:请计算出被所有牛崇拜的牛的个数。思路:刚学的Kosaraju算法。考虑这道题,把崇拜关系(A,B)看做是一条有向边,并且,我们发现牛的崇拜关系具有传递性。那么只要牛A有一条路径连向牛B,就可以判定牛A崇拜牛B。于是,被所有牛崇拜的牛就是所有的点都存在一条路径连向它的有向路径。下边简述下Kosaraju算法:(1)对原图原创 2015-01-29 19:42:25 · 1283 阅读 · 0 评论 -
POJ1236 Network of Schools【Tarjan】【强连通分量】
题目大意:N台电脑之间能够通过有向边(u,v)从第u台电脑传输文件到第v台电脑。如果给第u台电脑投放一个文件,那么这个文件就能通过有向边传输到第v台电脑上,给你N台电脑的连接情况。那么问题来了:1、最少向这N台电脑中的几台电脑投放文件,就能使N台电脑都能接收到文件。2、最少向这N台电脑构成的图中添加几条边,使只向一台电脑投放文件,就能够是N台电脑都能接收到文件。思路:该图中的文件具有传递性。很快发现强连通的特征。对应图中的一个强连通分量,只要向其中的一个点投放文件,那么这个强连通分量就都能原创 2015-02-03 10:21:26 · 1770 阅读 · 0 评论 -
POJ2186 Popular Cows【Tarjan】【强连通分量】
题目大意:每头奶牛都希望自己成为最欢迎的那头牛。给你N头牛,M个崇拜关系(A,B)。意思是牛A崇拜牛B。特别是,如果牛A崇拜牛B,牛B崇拜牛C,那么牛A也崇拜牛C。那么问题来了:请计算出被所有牛崇拜的牛的个数。思路:把崇拜关系(A,B)看做是一条有向边,并且,我们发现牛的崇拜关系具有传递性。那么只要牛A有一条路径连向牛B,就可以判定牛A崇拜牛B。于是,被所有牛崇拜的牛就是所有的点都存在一条路径连向它的有向路径。这道题中,将原图强连通分量缩点后构成了DAG,那么如果新图中出度为0的点只有一个,则有原创 2015-02-02 17:30:27 · 1058 阅读 · 0 评论 -
POJ2375 Cow Ski Area【Tarjan】【强连通分量】
题目大意:有一片供奶牛滑雪的滑雪场,可供滑雪的区域是W(宽)*L(长)的矩阵。上边有W*L个点。规定奶牛从一个点只能向它上、下、左、右相邻的并且高度不大于它的点运动。现在想要在某些点对之间架设缆车,使得奶牛可以从较低的地方想较高的地方运动,那么问题来了:最少需要多少辆这样的缆车就可以使奶牛从每个点运动到可供滑雪区域的每个角落。思路:把奶牛符合从点u移动到点v的条件当做一条单向边。那么所有点和边就可以构成有向图。根据奶牛可以从点u移动到邻近并且高度不大于它的点v,可以分为两种情况:(1)点v比原创 2015-02-04 11:24:00 · 962 阅读 · 0 评论 -
POJ3592 Instantaneous Transference【强连通分量】【最长路】
题目大意:有一个N*M的矩阵地图,矩阵中用了多种字符代表不同的地形,如果是数字X(0~9),则表示该区域为矿区,有X单位的矿产。如果是"*",则表示该区域为传送点,并且对应唯一一个目标坐标。如果是"#",,则表示该区域为山区,矿车不能进入。现在矿车的出发点在坐标(0,0)点。并且(0,0)点一定不是"#"区域。矿车只能向右走、向下走或是遇到传送点的时候可以传送到指定位置。那么问题来了:矿车最多能采到多少矿。思路:如果把N*M个矩阵单位看做是N*M个点,编号为0~N*M。然后从一个坐标到另一个原创 2015-02-11 20:46:08 · 1983 阅读 · 1 评论 -
POJ3114 Countries in War【强连通分量】【最短路径】
题目大意:间谍在战争期间想要传递一份谍报回国,谍报可以在邮局之间传递,但这种传递是单向的,并且会小号一些时间。但是如果两个邮局在同一个国家的话,那么谍报在这两个邮局之间传递是不消耗时间的,可以立即到达。如果几个邮局发出的谍报可以通过一些路径相互到达,那么这些邮局就属于一个国家。那么问题来了:给出一个起点和终点,问最快什么时候能够将谍报传递到。思路:本题求得是有向图上的最短路。以邮局为点,从一个邮局到达另一个邮局的时间为边权,但是这里的边权分两组:相同国家的邮局之间的边权和不同国家的邮局之间原创 2015-02-14 21:19:44 · 1112 阅读 · 0 评论 -
强连通分量Kosaraju、Tarjan【模板】
强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量。 把一个图变为一个强连通图需要添加边数:先求出原图的强连通分量,缩点后变为有向无环图,计算新图入度为0的点的个数SumIn和出度为0的点的个数SumOut,原创 2015-05-05 13:06:47 · 1168 阅读 · 0 评论