代码如下
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int dfs(vector<vector<int>> &adjacent, int root, vector<int>& memory)
{
if (memory[root])
{
return memory[root];
}
else
{
int maxn = root;
for (int neighbor : adjacent[root])
{
maxn = max(maxn, dfs(adjacent, neighbor, memory));
}
memory[root]=maxn;
return maxn;
}
}
int main()
{
// graph initialization
int n, m;
cin >> n >> m;
vector<vector<int>> adjacent=vector<vector<int>>(n+1);
int x, y;
for (int i = 0; i < m; i++)
{
cin >> x >> y;
adjacent[x].push_back(y);
}
vector<int> memory=vector<int>(n+1);
for (int i = 1; i <= n; i++)
{
sort(adjacent[i].begin(),adjacent[i].end());
dfs(adjacent, i, memory);
cout<<memory[i]<<" ";
}
}