void get_loop(int u) {
vis[u] = ++vs;
for (int i = head[u]; i; i = edge[i].next) {
int v = edge[i].to;
if (v == fa[u]) continue;
if (vis[v]) {
if (vis[v] < vis[u]) continue;
loop[++cnt] = v;
for ( ; v != u; v = fa[u]) {
loop[++cnt] = fa[v];
}
}
else fa[v] = u, get_loop(v);
}
}
基环树找环
最新推荐文章于 2023-07-15 10:42:14 发布