基环树
转载请注明出处,部分内容引自 cly_none 大神的博文。
基环树,也是环套树,简单地讲就是在树上再加一条边。它形如一个环,环上每一个点都有一颗子树的形式。因此,对基环树的处理大部分就是对树处理和对环处理。显然,难度在于后者。
扣环
这是几乎所有基环树处理的第一步。扣环的方式多种多样,各有千秋,反正都是 O(n) 的。
struct edge{ int nxt,to,w; }e[N<<1]; int tot,cnt,rt; int fir[N],vis[N],lop[N],dist[N],inl[N]; int getlop(int u,int fa){ if(vis[u]){ rt=u;return 1; } vis[u]=1; int tmp; for(int i=h[u];i;i=e[i].nxt){ if(e[i].to==fa) continue; if(tmp=getlop(e[i].to,u),tmp){ if(tmp==1){ lop[++cnt]=u; dist[cnt]=e[i].w; inl[u]=1; if(u!=rt) return 1; } return 2; } } return 0; }View Code
标签:扣环,处理,基环树,int,cly,环套 From: https://www.cnblogs.com/buleeyes/p/17863109.html