/*
POJ 1523
问题:求图中割点,并且问删除该割点后剩下的图有几个连通分支
算法:
基于这样的定理:
假设v1是割点
1.如果v1是根节点,它有多少个子树,删除v1后就有多少个连通分量
2.如果v1并不是根节点。那么v1的子孙中,存在n个节点[v0..v1..v2..vn-1]满足
low[vi] >= dfn[v1],那么删除v1后得到n+1和连通分支
(像切绳子一样)
Accepted
*/
/*
若v1为割点,记subnets[v1]为v1的子节点数,
则去掉v1后,图被分成subnets[v1]+1个部分(每个子节点的部分和v1的祖先的部分),
若u为dfs树的根,则分成subnets[v1]个部分(根节点没有祖先)。
*/
#include <iostream>
#include <vector>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <stack>
#include <cstring>
using namespace std;
const int maxn = 1005;
vector<int> edge[maxn];
int dfn[maxn],low[maxn];
//int cutpoint[maxn];
POJ 1523——Tarjan + 计算删除割点后的连通分支数
最新推荐文章于 2021-08-03 18:34:56 发布