题目链接

最容易想的思路:对于每一个点都进行dfs/bfs,时间复杂度为O(n*(n+m)),显然超时

可以使用类似记忆化的操作,一个点能到达的最大值是自己所有能达到的边的最大值,则可以递归来做

但有一个BUG,如果有一个环状,就会无限递归

比如\(1=>2,2=>3,3=>1\)

那就可以换一种方式考虑,从最大的点开始枚举,枚举能到达的点,将其答案设置为当前的点

设置过答案的点在后续枚举的时候就不用更新了,因为是从大到小枚举,最先到的肯定是最大的

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
int n, m, x, y, ans[MAXN];
vector <int> p[MAXN];
int dfs(int x, int t) { // t是要设置的答案,当前枚举的点
ans[x] = t;
for (vector <int> :: iterator it = p[x].begin(); it != p[x].end(); ++it)
if (!ans[*it]) dfs(*it, t);
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; ++i) scanf("%d%d", &x, &y), p[y].push_back(x);
for (int i = n; i >= 1; --i)
if (!ans[i]) dfs(i, i);
for (int i = 1; i <= n; ++i) printf("%d ", ans[i]);
return 0;
}

最新文章

  1. 【笔记】ztree的使用
  2. xpath定位实战(1)
  3. css总结(更新中...)
  4. 41个Web开发者JavaScript实用小技巧
  5. 为 MDS 修改 SharePoint 2013组件
  6. SQL学习指南 ——笔记
  7. PTA week10
  8. win10下安装Wampservice过程中遇到的问题及解决办法
  9. 使用jquery制作可视化的组织结构
  10. 百度和 Google 的搜索技术是一个量级吗?
  11. 第二百八十一、二、三天 how can I 坚持
  12. 总结nonatomic,assigncopy,retain
  13. CentOS 6.3中安装OpenCV2.3.1
  14. Cooley-Tukey算法 (蝶形算法)
  15. linux操作系统死机处理办法
  16. session前后台交互
  17. airTest 使用体验
  18. 举例分析 Makefile 中的 patsubst、wildcard、notdir 函数
  19. css3 简易时钟
  20. CentOS下安装Apache

热门文章

  1. Java8新特性:函数式编程
  2. 当前数据库表空间达到32G,需要扩容
  3. SQLSever事务
  4. C#.NET实现二分查找
  5. xshell取消置顶
  6. C# Aspose.Words.Document.PageCount 踩坑笔记(获取文档页数)
  7. Solon v1.11.0 发布,Hello Java
  8. 推荐一款采用 .NET 编写的 反编译到源码工具 Reko
  9. 【每日一题】【动态规划】2022年2月22日-NC59 矩阵的最小路径和
  10. Qt对象跨线程出现的问题记录,以及解决方案