图论:Tarjan
前置概念
时间戳:搜索时第几个搜索到这个点。如搜索顺序是1->2->3->6,则6的时间戳为4
对于无向图
连通分量:对于图G来的一个子图中,任意两个点都可以彼此到达,这个子图就被称为图G的连通分量(一个点就是最小的连通分量)
最大连通分量:对于图G的一个子图,这个子图为图G的连通分量,且是图G所有连通分量中包含节点数最多的那个,即为G的最大联通分量
算法流程
简单应用
缩点
有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。孤立的一个点也是一个强连通分量。
如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(SCC, Strongly Connected Components)。把每个强联通分量看成一个集合,把每个集合看成一个点,那么所有SCC就形成了一个DAG(有向无环图),就是著名的缩点。
根据题目意思,我们只需要找出一条点权最大的路径就行了,不限制点的个数。那么考虑对于一个环上的点被选择了,一整条环是不是应该都被选择,这一定很优,能选干嘛不选。很关键的是题目还允许我们重复经过某条边或者某个点,我们就不需要考虑其他了。因此整个环实际上可以看成一个点(选了其中一个点就应该选其他的点)
在处理了环后,我们就重新建立一张图,以每个环为节点(孤立一个点也算也算环的,其实也就是强联通分量了)。在这张图中我们要dp,显然对于任意边<u,v>,dp[v] = max(dp[v], dp[u] + new_weight[v])
。
dp的时候拓扑排一下序,这也是DAGdp的常见trick了。
1 |
|
找割点
割点:去掉无向联通图的某个点后,此图不连通,该点为割点。
1 |
|
图论:Tarjan