第一种(队列,会 WA)
void dfs1(int u) { vis[u] = true; q.push(u); for (int v : edge[u]) if (!vis[v]) dfs1(v); }
第二种(栈)
void dfs1(int u) { vis[u] = true; for (int v : edge[u]) if (!vis[u]) dfs1(v); stk.push(u); }