蒟蒻的奇怪解法
查看原帖
蒟蒻的奇怪解法
467775
2333?楼主2023/9/30 19:10

看题目想了一会就觉得像最短路··· 于是

#include <bits/stdc++.h>
using namespace std;
#define N 1005
int n,m,a[N][N],d[N][N],vst[N][N];
int fx[4]={0,-1,1,0};
int fy[4]={1,0,0,-1};
struct point{
	int x;int y;
	point(){}
	point(int xx,int yy):x(xx),y(yy){}	
};
struct node{
	int w;
	point p;
	node(){}
	node(int ww,point pp):w(ww),p(pp){}
};
priority_queue<node> q;
bool operator < (node a,node b)
{
	return a.w>b.w;
}
int dj(int stx,int sty)
{
	memset(d,0x3f,sizeof(d));
	d[1][1]=0;
	q.push(node(0,point(stx,sty)));
	while(!q.empty())
	{
		point nw=q.top().p;q.pop();
		
		if(vst[nw.x][nw.y]) continue;
	//	cout<<nw.x<<" "<<nw.y<<" "<<d[nw.x][nw.y]<<endl;
		vst[nw.x][nw.y]=1;
		for(int i=0;i<4;i++)
		{
			int vx=nw.x+fx[i],vy=nw.y+fy[i];
			
			if(vx<=0||vy<=0||vx>n||vy>m) continue;
			if(d[vx][vy]>=max(d[nw.x][nw.y],a[vx][vy]))//松弛改成路径最小的最大值
			{
			
				d[vx][vy]=max(d[nw.x][nw.y],a[vx][vy]);
				q.push(node(d[vx][vy],point(vx,vy)));
			}
		}
	}
	return d[n][m];
}
int main()
{
	scanf("%d",&n);scanf("%d",&m);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			scanf("%d",&a[i][j]);
	cout<<dj(1,1);
	
		
	return 0;
}

复杂度O(n2logn2)O(n^2logn^2),吸氧能过

话说不吸氧有没有可能过,也许手写堆能过?

2023/9/30 19:10
加载中...