当前位置: 首页 > news >正文

蓝桥杯备考:图的遍历

这道题乍一看好像没什么不对的,但是!但是!结点最大可以到10的5次方!!!我们递归的时间复杂度是很高的,我们正常遍历是肯定通过不了的,不信的话我们试一下

#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int N = 1e5+10;
int n,m;
vector<int> edges[N];
bool st[N];
int ret;
void dfs(int u)
{
	for(auto&e : edges[u])
	{
		if(!st[e])
		{
			ret = max(ret,e);
			st[e] = true;
			dfs(e);
		}
	}
}
int main()
{
	cin >> n >> m;
	
	for(int i = 1;i<=m;i++)
	{
		int x,y;cin >> x >> y;
		edges[x].push_back(y);
	}
	for(int i =1;i<=n;i++)
	{
		memset(st,false,sizeof(st));
		st[i] = true;
		ret = i;
		dfs(i);
		cout << ret << " ";
	}
	
	
	
	return 0;
}

正着来,我们的时间复杂度很高

如果正着来,我们需要从1开始遍历图一遍,遍历到5再回去找6,从2再来一遍,遍历到1,回去找6,这时候我们的时间复杂度就是N平方,

我们不如把图反过来,反着找,把每次能到达最大点的编号标记上,然后下次再遍历的时候如果某个点已经被标记了就剪掉,时间复杂度就是O(N)

#include <iostream>
#include <vector>
using namespace std;
const int N = 1e5+10;
vector<int> edges[N];
int ret[N];
int n,m;
void dfs(int x,int n)
{
	ret[x] = n;
	for(auto &e : edges[x])
	{
		if(ret[e]) continue;
		ret[e] = n;
		dfs(e,n);
	}
}
int main()
{
	cin >> n >> m;
	for(int i = 1;i<=m;i++)
	{
		int x,y; cin >> x >> y;
		edges[y].push_back(x);
	}
	//上面表示存反图
	for(int i = n;i>=1;i--)
	{
		if(ret[i]) continue;
		dfs(i,i);
	 } 
	
	for(int i =1;i<=n;i++)
	{
		cout << ret[i] << " ";
	}
	
	return 0;
}

相关文章:

  • ZW3D二次开发_非模板表单_输入框类控件_逐字符回调
  • 线程控制与线程操作
  • 思库拉水厂开业庆典千人大会回顾
  • 简记_FPGA 硬件最小系统设计
  • 案例分享|树莓派媒体播放器,重构商场广告的“黄金三秒”
  • Transformer-based 1-Dimensional Tokenizer (TiTok):一种革命性的1D图像分词方法(代码实现)
  • LLaMA Factory对大模型微调和导出量化操作
  • ElementPlus 快速入门
  • 当科技业成为系统性压榨的绞肉机
  • PostgreSQL_数据使用与日数据分享
  • 如何修改SQL2008 账号SA的密码
  • 2025年- G26-Lc100-57.插入间隔(max、min)--java版
  • pyside6的QGraphicsView体系,当鼠标位于不同的物体,显示不同的右键菜单
  • 【自学笔记】Spark基础知识点总览-持续更新
  • 解决PowerShell下Git中文乱码问题
  • vmwaretools解压失败|vmware tools distrib cannot mkdir read only file system|bug汇总
  • OpenResty(Lua)+Redis实现动态封禁IP
  • 朴素贝叶斯:文本处理中的分类利器
  • 3. 轴指令(omron 机器自动化控制器)——>MC_ResetFollowingError
  • 计算机网络的分类——按照按拓扑结构分类
  • 新华社评论员:汇聚起工人阶级和广大劳动群众的磅礴力量
  • 新一届中国女排亮相,奥运冠军龚翔宇担任队长
  • 新剧|反谍大剧《绝密较量》央一开播,张鲁一高圆圆主演
  • 清华姚班,正走出一支军团
  • 清华数字政府与治理研究院揭牌:服务数字政府建设需求
  • 体育公益之约跨越山海,雪域高原果洛孕育足球梦