本地过了但几个点REQwQ
查看原帖
本地过了但几个点REQwQ
1252442
lucy2012楼主2024/4/17 21:06
#include<bits/stdc++.h>
using namespace std;
struct where{
	int x,y;
};
queue<where> q;
int sum[310][310],when[310][310];
int d[4][2]={{0,1},{1,0},{-1,0},{0,-1}};
void minn(int a,int b,int c){
	if(a>=0&&b>=0)
	    when[a][b]=min(when[a][b],c);
}
int main(){
	int m,ans=100000;
	memset(sum,-1,sizeof(sum));
	memset(when,0x7f,sizeof(when));
	cin>>m;
	for(int i=1;i<=m;i++){
		int x,y,t;
		cin>>x>>y>>t;
        minn(x,y,t);
	    for(int k=0;k<4;k++)
	        minn(x+d[k][0],y+d[k][1],t);
	}
	q.push((where){0,0});
	sum[0][0]=0;
	while(!q.empty()){
		where u=q.front();
		int ux=u.x,uy=u.y;
		q.pop();
		for(int k=0;k<4;k++){
			int x1=ux+d[k][0],y1=uy+d[k][1];
			if(x1<0||y1<0||sum[x1][y1]!=-1||sum[ux][uy]+1>=when[x1][y1])
			    continue;
			sum[x1][y1]=sum[ux][uy]+1;
			where wh={x1,y1};
			q.push(wh);
		}
	}
	for(int i=0;i<=305;i++){
		for(int j=0;j<=305;j++){
			if(when[i][j]>1000&&sum[i][j]!=-1)
			    ans=min(ans,sum[i][j]);
		}
	}
	if(ans==100000)
	    cout<<-1;
	else
	    cout<<ans;
    return 0;
}

测试点

2024/4/17 21:06
加载中...