mirror of
				https://git.wolves.top/wolves/leetcode.git
				synced 2025-11-04 09:16:32 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			34 lines
		
	
	
		
			965 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			965 B
		
	
	
	
		
			C++
		
	
	
	
	
	
#include <vector>
 | 
						|
#include <functional>
 | 
						|
using namespace std;
 | 
						|
class Solution {
 | 
						|
public:
 | 
						|
    vector<vector<int>> getAncestors(int n, vector<vector<int>> &edges) {
 | 
						|
        vector<vector<int>> g(n);
 | 
						|
        for (auto &e : edges) {
 | 
						|
            g[e[1]].push_back(e[0]); // 反向建图
 | 
						|
        }
 | 
						|
 | 
						|
        vector<vector<int>> ans(n);
 | 
						|
        vector<int> vis(n);
 | 
						|
        function<void(int)> 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;
 | 
						|
    }
 | 
						|
}; |