1. 程式人生 > >基環樹小結

基環樹小結

基環樹

顧名思義,就不解釋過多了,先看一張圖

圖中央的環顯而易見,一般的初始化流程有兩個

(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); } } }