转自:http://blog.csdn.net/acdreamers/article/details/16902023#comments我们首先来看一下什么是前向星.前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序,并记录下以某个点为起点...
分类:
其他好文 时间:
2015-02-01 19:12:34
阅读次数:
176
题目大意:公主要求王子通过第k短的路径去找她。给出了N个点,M条单向边的图。也给出了
起点s(王子所在的点)、终点t(公主所在的点)和k。问:K短路是多少。
思路:第一次做K短路的题目。用的A*+SPFA来做的。下边简单说下这个算法。
使用链式前向星存储图。安装下边步骤来做。
(1)将有向图的所有边正向、反向分别存入两个不同的边集(Edges,Edges1)中。用反向边集,
以所求终点t为源点,利用SPFA或Dijkstra求解出所有点到t的最短路径,用Dist[i]数组来表示点i
到点t的最短距离。
(2...
分类:
其他好文 时间:
2015-01-26 17:06:18
阅读次数:
246
题目大意:给你N个结点和M条边。问:从结点1出发分别到2、3、4、…、N结点的路程以及
从这些结点返回结点1的总路程和。
思路:求源点到各结点的距离问题,用Bellman-Ford时间复杂度为O(N*M),这道题的数据规
模是1000000,所以果断不行。我用了链式前向星(类似邻接表)存储图,因为要分别求出去时的
最短总路程和回来时的最短总路程,所以用了二维的链式前向星,一个存正边,一个存反边,然
后以结点1为起点,对正边做一次SPFA算法,再以结点1为起点,对反边做一次SPFA算法。
看讨论区貌似有人用g...
分类:
其他好文 时间:
2015-01-25 11:06:22
阅读次数:
233
题目大意:给你一棵树,有N个结点,N-1条边。最后询问距离树上两个点(u,v)最近的
公共祖先是多少。
比如上图:6和16的最近公共祖先就是4;14和1的最近公共祖先就是1。
思路:对于最近公共祖先LCA问题,最经典的离线算法是Tarjan-LCA算法。用链式前向
星存储图和询问,Head[]和Edges[]表示图(树),QHead[]和QEdges[]表示询问。集合
的操作用并查集实现。这道题里用了indegree[]数组来存储结点的入度,找到入度为0的
根结点root,调用LCA(root)。
Tarj...
分类:
编程语言 时间:
2014-12-31 21:35:07
阅读次数:
161
题目大意:给你N个点M条边的图,问:图的最小生成树是否唯一。
思路:参考算法书,在kruskal算法的基础上进行修改,加入(x,y)两点在最小生成树
上路径最长的边的计算。使用了链式前向星记录每个集合中含有那些点。
在合并集合(邻接表)的时候,为了方便,加入了End[]记录邻接表尾节点的位置。
MST表示最小生成树的大小,SecMST表示次小生成树的大小。最后判断是否想等
即可。...
分类:
其他好文 时间:
2014-12-28 00:31:28
阅读次数:
187
运用五种方式来实现图的存储,以适应不同的情况。
方式1:邻接矩阵
方式2:前向星
方式3:邻接表——动态建表
方式4:邻接表——vector模拟链表实现
方式5:邻接表——链式前向星★...
分类:
其他好文 时间:
2014-12-23 21:11:42
阅读次数:
246
逃生
思路:刚开始以为直接拓扑排序就可以,其实不然。题目的意思是:如果有满足拓扑排序
的多种情况的前提下,让1先尽量靠前,满足1尽量靠前之后,让2尽量靠前,而不是直接
的字典序。
比如:
4 2
3 2
4 1
结果应为4 1 3 2,而不是3 2 4 1。
所以进行反向建边,然后拓扑排序,用链式前向星存储图,为了使得序号小
的点尽量靠前,所以用优先队列存储将入度为0的点,在逐一取出,遍历该点
的边,就使得大的点尽量靠前,最后逆序输出就可以了。
Time Limit: 2000/1000 MS (J...
分类:
编程语言 时间:
2014-12-22 16:21:37
阅读次数:
192
题目大意:给你一个有向图,判断是否有环。
思路:构建拓扑排序,如果排序失败,说明该有向图存在有向环。
另一种思路,用链式前向星存储图,在数据输入的同时统计每个点的入度,
并存入indegree数组,每删除一个点,就遍历以这个点为起点的边,将边
对应的入度减1即可选择并删除下一点。用队列来存储已发现的入度为0的
点,更新入度的同时更新这个队列。如果最终得到队列中的元素个数小于
总的元素个数,说明排序失败,存在环。...
分类:
编程语言 时间:
2014-12-19 22:06:40
阅读次数:
264
题目大意:给你一个n*m的矩形图,每个位置上有'N'、'S'、'W'、'E',分别表示上下左右
四个方向。给你初始位置,如果能走出去了, 输出走出去的步数。
如果成环了,就输出环走一圈需要多少步。
思路:用链式前向星来做,把图看做是n个点,每个位置就是一条边,将边用链式前向星存
起来,每条边就有了一个序号,这个序号就是走的步数。然后,每走一步,我们就开始判
断是否在之前存储过这个位置(这条边),如果存储过就跳出循环,输出已存在这个位置的序
号(就是走圈前的步数),再输出总序号-已存在那个位置的序号(就是走圈...
分类:
其他好文 时间:
2014-12-18 17:02:56
阅读次数:
176
这个题 LIS + 并查集的思想 + 链式前向星要求找s(i,j)使i j 能有最长的LIS 。。。做法是枚举每一个j 即终点 算 起点 的可能无力吐槽了 bc 的时候写错了一个地方 导致TLE 后来幡然醒悟了 改了就a了+++++++++++++++++++++++++++++++++++++++...
分类:
其他好文 时间:
2014-12-06 22:48:39
阅读次数:
221