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);
}
};