随笔 - 531  文章 - 0  评论 - 3  阅读 - 10215 

一些直白的理解,和标准定义有差别,但也足够了

 

点双连通:一个图任意去掉一个点后仍然联通(   或者说任意两点件都有两条路径(无任何重叠的边)   )     ;    边双连通同理

割点:去掉某个点后,图不连通      割边同理

 

求割点 ( low[y]>=dfn[x] )

复制代码
#include <bits/stdc++.h>
using namespace std ;
 const int N=2*1e4+3,M=5*1e5+2;
 int dfn[N],low[N],n,m,pool;
 int ans,cut[N];
 int all,go[M],nxt[M],hd[N];
 void add(int x,int y){
     all++; go[all]=y,nxt[all]=hd[x],hd[x]=all;
 }
 void tar(int x,int fa){
     dfn[x]=low[x]=++pool;
     
     int y,c=0;
     for(int i=hd[x];i;i=nxt[i]){
        y=go[i];
      if(!dfn[y]){
          c++,tar(y,x),low[x]=min(low[x],low[y]);
          
          if(fa==0&&c>1||fa&&dfn[x]<=low[y]) 
          ans+=(cut[x]?0:1),cut[x]=1;
      }    
      else if(y!=fa) low[x]=min(low[x],dfn[y]);
    }
 }
 int main(){
     int i,x,y;
     cin>>n>>m;
     for(i=1;i<=m;i++) 
     cin>>x>>y,add(x,y),add(y,x);
    for(i=1;i<=n;i++) if(!dfn[i]) tar(i,0);
    cout<<ans<<'\n';
    for(i=1;i<=n;i++) if(cut[i]) cout<<i<<' ';
 }
 
 
 
复制代码

 

求割边

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include<bits/stdc++.h>
using namespace std ; const int N=3*1e4+2,M=4*N;
 
 int ans,nxt[M],go[M],hd[N],all;
 void add(int x,int y){
    go[++all]=y,nxt[all]=hd[x],hd[x]=all;
 }
 int dfn[N],low[N],n,m,pool;
  
 void tarjan(int x,int fa){
     dfn[x]=low[x]=++pool;
     int i,y;
     for(i=hd[x];i;i=nxt[i]){
         y=go[i];
         if(!dfn[y]){
             tarjan(y,x),low[x]=min(low[x],low[y]);
             if(dfn[x]<low[y])
                 ans++; //bridge[i]=bridge[i^1]=1
         }
        else if(y!=fa) low[x]=min(low[x],dfn[y]);
     }
 }
  void init(){
     for(int i=1;i<=n;i++) hd[i]=dfn[i]=0;
     all=1; ans=pool=0;
 }
 int main(){
     int i,x,y;
     while(cin>>n>>m,n){
         init();
         for(i=1;i<=m;i++)
          cin>>x>>y,add(y,x),add(x,y);
         for(i=1;i<=n;i++) if(!dfn[i]) tarjan(i,0);
          cout<<ans<<endl;
    }
 }

 

posted on   towboat  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示