#include #include using namespace std; class Solution { public: vector> getAncestors(int n, vector> &edges) { vector> g(n); for (auto &e : edges) { g[e[1]].push_back(e[0]); // 反向建图 } vector> ans(n); vector vis(n); function dfs = [&](int x) { vis[x] = true; // 避免重复访问 for (int y : g[x]) { if (!vis[y]) { dfs(y); // 只递归没有访问过的点 } } }; for (int i = 0; i < n; i++) { ranges::fill(vis, false); dfs(i); // 从 i 开始 DFS vis[i] = false; // ans[i] 不含 i for (int j = 0; j < n; j++) { if (vis[j]) { ans[i].push_back(j); } } } return ans; } };