当前位置:
网站首页 >
科学
> 【2020小米网选D Router Mesh】Tarjan问每个点属于哪一个点双连通组件
传送门
给定一个无向图,对每个节点进行查询。问题是,如果删除这个点(及其所有相关边),整个图中会有多少个连通块?
用Tarjan算法的思想来写,dfn[i]表示节点i的dfs阶,而low[i]表示从节点i dfs可以到达的dfn值最小的节点的dfn值。如果u是当前节点,v是u的未访问子节点,如果对v完成dfs后,得到low[v] <= dfn[u],那么就意味着从u的父节点,经过u,我们可以在到达v时,如果删除节点u,则无法到达节点v。这相当于删除节点u。 u 和节点 v 的父节点会被分成两个连通的块,即两部分不能互相到达。因此,你只需要计算你有多少个节点。子节点v满足Fuzzy [v] <= dfn [u]。当然,u的父节点也是子节点,所以需要+1来包含父节点。但每次dfs的起点都没有父节点,所以不需要+1。
总结一下,删除节点u有什么影响呢?假设删除节点 u 将添加 ans[u] 连接块。该无向图最初包含 m 个连通块。该节点原本属于 1 个连通块。删除后,会添加 ans[u] 个连通块。 block,那么删除该节点后的连通块数应为m-1+ans[u]。
#包括
#包括
#包括
#包括
#包括
#包括
#包括