割点和割边

  1. <span style="font-size:14px;">struct node  
  2. {  
  3.     int y,pre,i;//增加一个i是考虑重边的情况的   
  4. };  
  5. node a[N];  
  6. int pre[N],sign[N];  
  7. int dfn[N],low[N];  
  8. int tot,lenn;  
  9. int n,m,len;  
  10. void init()  
  11. {  
  12.     memset(pre,-1,sizeof(pre));  
  13.     memset(sign,false,sizeof(sign));  
  14.     len=1;tot=1;  
  15. }  
  16. void addpage(int s,int t,int i)  
  17. {  
  18.     a[len].y=t;  
  19.     a[len].pre=pre[s];  
  20.     a[len].i=i;  
  21.     pre[s]=len++;  
  22. }  
  23. void dfs(int x,int s)  
  24. {  
  25.     dfn[x]=low[x]=tot++;  
  26.     sign[x]=true;  
  27.     for(int i=pre[x]; i!=-1; i=a[i].pre)  
  28.     {  
  29.         int y=a[i].y;  
  30.         if(a[i].i==s) continue;  
  31.         if(!sign[y])   
  32.         {  
  33.             dfs(y,a[i].i);  
  34.             low[x]=min(low[x],low[y]);  
  35.         }  
  36.         else low[x]=min(low[x],low[y]);  
  37.     }  
  38.   
  39. }  
  40. int main()  
  41. {   
  42.       
  43.     init();  
  44.     repf(i,1,n)  
  45.         if(!sign[i])  
  46.     dfs(i,-1);//其中-1是代表的边的   
  47.    return 0;  
  48. }  
  49.  对于边x~y,如果low[x]>dfn[y]||low[y]>dfn[x]即为割边  
  50. 对于点u是图的割点当切仅当u存在一个字节点v.使得low[v]>=dfn[u]</span> 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值