设为首页 加入收藏

TOP

HDU 4587 TWO NODES (双连通割点应用)
2015-01-22 21:13:42 来源: 作者: 【 】 浏览:55
Tags:HDU 4587 TWO NODES 连通 应用



题意:N个点(0~n-1),M条无向边,问去掉2个点后最多的连通分块有多少。


先去掉一个点求出各个割点,并在dfs过程中求出去掉这个割点有多少个连通分块(将iscut[u]=true改为iscut[u]++),

这样子第二次就可以直接找出最多的连通分块了。


#include
  
   
#include
   
     #include
    
      #include
     
       #include
       #include
       
         #include
        
          #include
         
           #include
          
            using namespace std; #define M 5005 int pre[M],dfs_clock,iscut[M],low[M],bcc_cnt,bccno[M]; vector
           
            G[M],bcc[M]; struct Edge { int from,to; }edge[M*2]; int edge_num,head[M]; void add_edge(int u,int v) { edge[edge_num].from=v; edge[edge_num].to=head[u]; head[u]=edge_num++; } int del; int dfs(int u,int fa) { int lowu=pre[u]=++dfs_clock; for(int i=head[u];i!=-1;i=edge[i].to) { int v=edge[i].from; if(v==del) continue; if(!pre[v]) { int lowv=dfs(v,u); lowu=min(lowv,lowu); if(lowv>=pre[u]) iscut[u]++; } else if(pre[v]
            
             

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇c语言中读入带空格的字符串 下一篇C编程规范, 示例代码。

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: