基环树小结

基环树

顾名思义,就不解释过多了,先看一张图

图中央的环显而易见,一般的初始化流程有两个

(1)找环

void Get_ring(LL u,LL fa){
    visit[u]=++cnt;
    for(LL i=head[u];i;i=dis[i].next){
        LL v=dis[i].to;
        if(v==fa)
            continue;
        if(visit[v]){
            if(visit[v]<visit[u])
                continue;
            a[++num]=v;
            f[v]=true;
            for(;v!=u;v=pre[v]){
                a[++num]=pre[v];
                f[pre[v]]=true;
            }
        }else{
            pre[v]=u;
            Get_ring(v,u);
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/y2823774827y/p/9971472.html