[PKU 1144]Network(割点)

来源:互联网 发布:淘宝架设到公众号 编辑:程序博客网 时间:2024/06/10 05:38

【题目大意】:

给你一个图,求割点的个数~

【题目分析】:

这题够裸了吧……刷水题果然很有快感啊……

其实要是不会割点算法还是要想想的~

那就简单总结下吧~割点的特点就是如果去掉这个点图就不连通了。这个就有一个非常经典的东西,就是WC王宏说成“塔尖”(Tarjan)的算法。(P.s.他刚说的时候我们几个都楞了,反应过来我们都冷了……)

Tarjan算法是一堆算法(我只能这么说,因为好多算法都叫Tarjan),关于连通性的几个Tarjan算法都有一个很有特点的地方,就是他都用到了一下两个数组。

dfn:这个点在dfs序列中的位置

low:经过这个点及这个点的所有儿子能追溯到的dfn最小点的dfn值~~

这样我们发现,如果发现low(儿子)>=dfn(父亲),那么这个父亲就是一个割点。(他的儿子向下找没法重新找到自己的父亲~)

当然这还是不够的,我们发现对于我们搜索的第一个点来说,他的dfn值是1,永远不会有点的low值比他大,所以我们要特判下,如果说他的真正的儿子(就是dfs的时候找到的儿子,也就是环不算)的个数大于1的话,他就是一个割点。

【代码】(这悲剧的东西怎么也跑不出0MS来~):

原创粉丝点击