基环树
顾名思义,就不解释过多了,先看一张图
图中央的环显而易见,一般的初始化流程有两个
(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); } } }