void getcircle(int x,int y)
{
while(x!=y)
{
circle[++tot]=x;
x=st[--tp];
}
circle[++tot]=y;
}
void dfs(int x,int lastedge)
{
mark[x]=1;
if(!flag) st[++tp]=x;//注意这里一定要加这个判断,不然的话tp可能小于0
for(int i=Last[x];i;i=Next[i])
{
int u=End[i];
if(i==(lastedge^1)) continue;
if(mark[u])
{
if(flag) continue;//这里的判断不能放在上面那个括号里,不然的话会无限循环
flag=1;
getcircle(x,u);
continue;
}
dfs(u,i);
}
if(!flag) tp--;
}
相关文章
- 09-27基环树学习笔记
- 09-27CF1454E Number of Simple Paths(容斥+基环树)
- 09-27洛谷AT2046 Namori(思维,基环树,树形DP)
- 09-27LG2921 [USACO2008DEC]Trick or Treat on the Farm 内向基环树
- 09-27判断单链表是否有环 + 找入环的第一个结点 + 找两个链表相交的起始结点
- 09-27Codeforces 859E Desk Disorder 并查集找环,乘法原理
- 09-27P4949 最短距离(基环树+树链剖分)
- 09-27E. Number of Simple Paths(环基树 + 思维)
- 09-27bzoj 4883 [Lydsy1705月赛]棋盘上的守卫 题解(思维,建图,最小基环森林)
- 09-272018牛客多校第三场B(基环树dp)