摘要:
以前看过SPFA的解释,看懂了却一直没有尝试着写出来。今天见到一题100000个点1000000条边的最短路问题,看到边数相对点来说是非常少的,所以我第一反应就是用Dij来做。但是考虑到普通的Dij写这个10^6条边的代码是带不动的,于是我突然想起了好像可以用优先队列来对此优化,这种优化方法叫做SPFA(纠正一下,应该说这种方法跟SPFA类似,但SPFA是对Bellman的普通队列优化)。我没有再去看SPFA的伪代码或者模板,只是凭自己对优先队列的用法来尝试着写这个优先队列优化的Dij,自己算过,理论时间复杂度是O(ke),e是边的数目,k不超过2。 由于是第一次写这个代码,中间出现好多... 阅读全文
摘要:
这是割顶题中的极为基础的一道,就是用了《数据结构》中的关节点(P178),或者说是刘汝佳的《算法艺术与信息学竞赛》中的割顶(P285)。我的理解和解释,就是如果当前结点的某个子结点的祖先的最低遍历编号不小于当前结点的遍历编号(这个解释必须这么长,因为无论是哪本书,对此的解释都是差不多的),那么当前结点就是所要找的割顶,而且割的是之前提及的某个子结点与在当前结点前被遍历的祖先的联系。 这题可以直接套《数据结构》的FindArticul、DFSArticul函数,但是还要做的是思考怎样统计割顶的把整个图割成子连通分量的个数,因为题目要求求出割顶的同时,也要输出割顶把图分成多少部分。如果没有,... 阅读全文