POJ PKU 1144 割点个数
(2010-10-02 10:30:47)
标签:
pojpku1144割点个数it |
分类: 图论 |
题目描述:求个点个数。
解题报告:
结合tarjan算法的定义:
low[i]<dfn[m]表示i结点能够到达的最低深度可以比m小,也就是说i结点可以通过某条路径(这个应该是后向边)到达深度比m小的结点,
也就是说如果m点去掉,i结点还是可以通过其他的路径与m结点的上方的结点相连,并没有因为m的除掉而成为孤立的一部分脱离整个图形。
low[i]== dfn [m]表示i结点能够到达的最低深度就是m,在这棵树上没有能够到达m上方的结点的后向边,如果m除掉后,那么很显然i结点
(以及他的下部分)会脱离整个原来的图
如果low[i]> dfn [m]这个就更显然了,他没有可以到达比m结点还要低深度的结点的路径,那么m去掉后只能孤立与原图。
根节点比较特殊,因为跟结点与他的儿子都满足low[i]>= dfn [m],所以根节点要做特殊的处理
求割点的时候由于不知道最开始选的树根是不是只有一个儿子,这样在DFS过来中不会满足low[u]>=dfn[v]而判为割点,但有两个或两个以上儿子的根肯定也是一个割点,所以要特判!
代码如下:
#include<iostream>using namespace std;
struct edge{int to, next;}e[200000];
int n, v[110], cnt, index, ans, root, dfn[110], low[110];
bool vst[110];
void insert(int from, int to)
{
}
void jeo(int id)
{
}
int main()
{
}