Lambda 递归

    // C++23
    auto dfs1 = [&](this auto &&self, int x, int p) -> void {
        for (auto y : adj[x]) {
            if (y == p)
                continue;
            self(y, x);
        }
    };
    // C++17
    std::function<void(int, int)> dfs2 = [&](int x, int p) {
        for (auto y : adj[x]) {
            if (y == p)
                continue;
            dfs2(y, x);
        }
    };