基环树找环模板 dfs版本

3 篇文章 0 订阅

基环树

无向基环树

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rSJ5RTND-1601904376773)(C:\Users\lin\Desktop\QQ截图20201005211846.png)]

找环代码


#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
using namespace std;
const int N = 1e5+10;

int h[N],e[2*N],ne[2*N],val[2*N],idx;
int dfn[N],id;//时间戳
int pre[N];//记录它的父亲是谁
int loop[N],cnt;

//无向图做法
void dfs_1(int u)
{
    dfn[u] = ++id;
    for(int i=h[u];~i;i=ne[i])
    {
        int j = e[i];
        if(j==pre[u])continue;
        if(dfn[j])
        {
            if(dfn[j]<dfn[u])continue;
            //找到闭环 u可以到达比它大的点
            loop[++cnt] = j;
            for(;j!=u;j=pre[j])loop[++cnt] = pre[j];
            return ;
        }
        else pre[j] = u,dfs_1(j);
    }
    return ;
}


内向基环树

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N5lrZ2sB-1601904376775)(C:\Users\lin\Desktop\QQ截图20201005211953.png)]

每一个点的出度都为1

void dfs(int u)
{
    dfn[u] = ++id;
    if(dfn[e[u]])mark = u;//找到环上一点
    else dfs(e[u]);
}

外向基环树

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-11IB2IMq-1601904376778)(C:\Users\lin\Desktop\QQ截图20201005212029.png)]

每一个点的出度都为1

这找环和内向基环树找环方法一样 只要反向建图就可以

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值