首页 > 其他分享 >POJ 2110 Mountain Walking(二分 枚举 BFS)

POJ 2110 Mountain Walking(二分 枚举 BFS)

时间:2022-10-02 22:45:22浏览次数:74  
标签:Mountain Walking int 点权 mid BFS vis xx yy

POJ 2110 Mountain Walking(二分 枚举 BFS)

题目:

​ 给出一张\(n * n(n \le 100)\)的地图,每个点都有一个点权\((val \le 110)\),可以任意选择路径,请问从(1, 1)走到(n, n)的路径中的最大点权和最小点权的差值的最小值是多少。

思路:

​ 捕捉最大值最小,且发现二分的复杂度是可以接受的,鉴定为二分。二分这个差值,枚举最小点权和最大点权,bfs验证是否存在这样的路径即可。

实现:

注意搜索的一些细节,防重走,限制点权范围之类的。

int d[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
const int N = 105;
int n;
int a[N][N];
int vis[N][N];

bool bfs(int lower, int upper)
{
	if(a[1][1] < lower || a[1][1] > upper)	return false;
	memset(vis, 0, sizeof vis);
	queue<PII> q;
	q.push(make_pair(1, 1));
	vis[1][1] = 1;

	while(q.size())
	{
		PII t = q.front();
		q.pop();

		if(t.first == n && t.second == n)	return true;

		rep(i, 0, 4)
		{
			int xx = t.first + d[i][0], yy = t.second + d[i][1];
			if(xx < 1 || xx > n || yy < 1 || yy > n)	continue;
			if(vis[xx][yy])	continue;
			if(a[xx][yy] < lower || a[xx][yy] > upper)	continue;

			vis[xx][yy] = 1;
			q.push(make_pair(xx, yy));
		}
	}
	return false;
}

bool check(int mid) //差值为mid
{
	for(int i = 0; i + mid <= 110; i ++)
		if(bfs(i, i + mid)) return true;
	return false;
}

int main()
{
	ios;
	cin >> n;
	rep(i, 1, n + 1)
	rep(j, 1, n + 1)
		cin >> a[i][j];

	int l = 0, r = 110;
	while(l < r)
	{
		int mid = (l + r) >> 1;
		if(check(mid))
			r = mid;
		else
			l = mid + 1;
	}
	cout << l << '\n';
}

标签:Mountain,Walking,int,点权,mid,BFS,vis,xx,yy
From: https://www.cnblogs.com/DM11/p/16749670.html

相关文章

  • 0-1 bfs 学习笔记
    01bfs是一种可以在\(\mathcal{O}(n+m)\)时间求解只含有\(0\),\(1\)两种边权的单源最短路的算法。这种情形下效率比dijkstra更高,和dijkstra一样好写(甚至更好写一......
  • 源码角度了解Skywalking之启动源码分析
    源码角度了解Skywalking之启动源码分析Skywalking的使用对于Skywalking的使用,有四种配置方案探针配置配置如下:-javaagent:/xxx/skywalking-agent.jar=agent.service_na......
  • 源码角度了解Skywalking之SPI在SKywalking中应用
    源码角度了解Skywalking之SPI在SKywalking中应用上篇文章中我们说到SKywalking的启动流程是怎样的,其中有一步是利用JDK的SPI机制来启动插件服务,今天我们就看一下具体是怎么......
  • 哥大周赛题目 0-1 Tree (BFS + 并查集)
    上周本地比赛,老wf选手都退役了,只剩我们这些22届本科升研究生来参赛了题目不是很难,11题,比之前的训练赛要简单很多,开场A了4题签到+1裸dp+1做过+1xjb乱搞。结果最后一......
  • ABC254E Small d and k(BFS)
    E-Smalldandk题目描述:  给\(n\)个顶点\(m\)条边的无向图,每个顶点的度不超过\(3\),给你\(Q\)次询问,每次询问给你一个顶点\(x\)和一个\(k\),表示求距离顶点\(x\)的长......
  • Skywalking on the way-千亿级的数据储能、毫秒级的查询耗时
    本文转载自架构染色,已获得作者授权,原文链接https://mp.weixin.qq.com/s/DlphAJ59COtBM958q_0TsA1、开篇自从Skywaling开始在公司推广,时不时会在排查问题的人群中听到......
  • 【安全测试】移动端安全测试MobFS工具
    APP安全测试工具介绍:       MobSF(MobileSecurityFramework)是一款自动化移动App安全测试框架,适用于iOS和Android,可熟练执行动态、静态分析和WebAPI......
  • 基于Docker部署Skywalking
     这里用的版本是9.2.0,如果用最新版,需查看配置是否需要更改,此处使用的为默认配置,如需修改配置请自行前往官网学习https://skywalking.apache.org/docs/main/v9.2.0/en/s......
  • 监控平台SkyWalking9入门实践
    简便快速的完成对分布式系统的监控;一、业务背景微服务作为当前系统架构的主流选型,虽然可以应对复杂的业务场景,但是随着业务扩展,微服务架构本身的复杂度也会膨胀,对于一......
  • skywalking安装以及使用go
    Skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s)架构而设计。提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决......