UVA-10765 Doves and bombs (双连通分量)

题目大意:给一个n个点的无向连通图,找出删除某个点后的连通块个数。

题目分析:统计一下每个节点属于几个双连通分量,若是割点,得到的便是答案,否则答案为1。

 

代码如下:

 

# include
# include
# include
# include
# include
# include
using namespace std;
# define REP(i,s,n) for(int i=s;ia.v;
    }
};
stackS;
vectorans;
vectorG[N],bcc[N];
int n,m,dfs_cnt,bcc_cnt,bccno[N],pre[N],low[N],cnt[N],iscut[N];

void dfs(int u,int fa)
{
    low[u]=pre[u]=++dfs_cnt;
    int child=0;
    REP(i,0,G[u].size()){
        int v=G[u][i];
        if(pre[v]==0){
            ++child;
            S.push(Edge(u,v));
            dfs(v,u);
            low[u]=min(low[u],low[v]);
            if(low[v]>=pre[u]){
                iscut[u]=1;
                bcc[++bcc_cnt].clear();
                while(1){
                    Edge x=S.top();
                    S.pop();
                    if(bccno[x.u]!=bcc_cnt){
                        bcc[bcc_cnt].push_back(x.u);
                        bccno[x.u]=bcc_cnt;
                    }if(bccno[x.v]!=bcc_cnt){
                        bcc[bcc_cnt].push_back(x.v);
                        bccno[x.v]=bcc_cnt;
                    }
                    if(x.u==u&&x.v==v) break;
                }
            }
        }else if(pre[v]

  

转载于:https://www.cnblogs.com/20143605--pcx/p/4923169.html

你可能感兴趣的:(UVA-10765 Doves and bombs (双连通分量))