关于如何判断仙人掌图,方法其实是记录环上点的度数。若一个点的度数超过2,则不是仙人掌图。
环上有几个点,可以通过深度来直接表示。
inline void DP(int rt,int x)
{
int num=dep[x]-dep[rt]+1;
for(int i=x;i!=rt;i=fa[i])
{
du[i]++;
if(du[i]>1) flag=1;
}
}
void tarjan(int u,int f)
{
dfn[u]=low[u]=++deep;
fa[u]=f;dep[u]=dep[f]+1;
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i];
if(v==f) continue;
if(!dfn[v])
{
tarjan(v,u);
low[u]=min(low[u],low[v]);
}
else low[u]=min(low[u],dfn[v]);
}
for(int i=0;i<g[u].size();i++)
{
int v=g[u][i];
if(u!=fa[v]&&dfn[v]>dfn[u]) DP(u,v);
if(flag) return;
}
}