图的遍历

/* 反向考虑,反向建图,考虑从x号点出发,可以到达哪些点,我们从n~1开始枚举 如果某一个点被更新到,呢么这个点一定不会被后面的点更新,就直接可以标记掉,从n号点出发可以到达5号点,呢么从n-1号点出发就 可以直接跳过5号点,还有5号点能到达的点。 复杂度是O(n),这样的想法很常见 */ #include <bits/stdc++.h> #define CLOSE ios::sync_with_stdio(false);cin.tie(0);cout.tie(0) const int N = 1e5 + 10, M = N, mod = 1e9 + 7; using namespace std; int h[N], e[M], ne[M], idx = 0; int n, m, ans[N]; bool st[N]; void add(int x, int y){ e[idx] = y, ne[idx] = h[x], h[x] = idx ++; } void dfs(int x, int limit){ if(st[x]) return; st[x] = true; ans[x] = limit; for(int i = h[x]; ~ i; i = ne[i]){ int j = e[i]; dfs(j, limit); } } int main() { CLOSE; memset(h, -1, sizeof h); cin >> n >> m; for(int i = 1; i <= m; i ++){ int x, y; cin >> x >> y; add(y, x); } for(int i = n; i >= 1; i --){ if(!st[i]){ dfs(i, i); } } for(int i = 1; i <= n; i ++){ cout << ans[i] << " "; } return 0; }

__EOF__

本文作者可爱的卤蛋
本文链接https://www.cnblogs.com/acwhr/p/18004900.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   可爱的卤蛋  阅读(8)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示