P3916 图的遍历 dfs + 反向建边
作者:
多米尼克領主的致意
,
2024-05-07 16:17:39
,
所有人可见
,
阅读 3
类似于记忆化的思路 反向建边搜索的好处是 当前第一层搜索的dfs一定是最优的点
因为是从大到小搜索
将搜索每个点的最优点 变成 最优点能被哪些点搜索到(包括自己)
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n, m;
vector<int>e[N];
int vis[N];
void dfs(int u, int d)
{
if(vis[u])return;
vis[u] = d;
for(auto x : e[u])
{
dfs(x, d);
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for(int i = 1;i <= m;i++)
{
int x, y;
cin >> x >> y;
e[y].push_back(x);
}
for(int i = n;i >= 1;i--)dfs(i, i);
for(int i = 1;i <= n;i++)cout << vis[i] << " ";
}