void tarjan(int u, int p) { dfn[u] = low[u] = ++idx; for (int e = head[u]; e; e = next[e]) if (!dfn[to[e]]) tarjan(to[e], u), low[u] = min(low[u], low[to[e]]); else if (to[e] != p) low[u] = min(low[u], dfn[to[e]]); }