蒟蒻求助63分
查看原帖
蒟蒻求助63分
690127
Xuzhenan520楼主2024/8/25 16:25

https://www.luogu.com.cn/record/174682914 具体测试点情况

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 5005;
int M,Xi[MAXN],Yi[MAXN],Ti[1005],mp[305][305];
bool f[305][305];
struct N0DE{
	int x,y,t;
};
queue<N0DE> q;
int main(){
	memset(mp,-1,sizeof(mp));
	cin>>M;
	for(int i=1;i<=M;i++){
		cin>>Xi[i]>>Yi[i]>>Ti[i];
		if(mp[Xi[i]][Yi[i]]!=-1)mp[Xi[i]][Yi[i]]=min(mp[Xi[i]][Yi[i]],Ti[i]);
		else mp[Xi[i]][Yi[i]]=Ti[i];
		if(mp[Xi[i]+1][Yi[i]]!=-1)mp[Xi[i]+1][Yi[i]]=min(mp[Xi[i]+1][Yi[i]],Ti[i]);
		else mp[Xi[i]+1][Yi[i]]=Ti[i];
		if(mp[Xi[i]-1][Yi[i]]!=-1)mp[Xi[i]-1][Yi[i]]=min(mp[Xi[i]-1][Yi[i]],Ti[i]);
		else mp[Xi[i]-1][Yi[i]]=Ti[i];
		if(mp[Xi[i]][Yi[i]+1]!=-1)mp[Xi[i]][Yi[i]+1]=min(mp[Xi[i]][Yi[i]+1],Ti[i]);
		else mp[Xi[i]][Yi[i]+1]=Ti[i];
		if(mp[Xi[i]][Yi[i]-1]!=-1)mp[Xi[i]][Yi[i]-1]=min(mp[Xi[i]][Yi[i]-1],Ti[i]);
		else mp[Xi[i]][Yi[i]-1]=Ti[i];
	}
	N0DE sb;
	sb.x=0,sb.y=0,sb.t=0;
	q.push(sb);
	while(!q.empty()){
		N0DE tot=q.front(),k;
		f[tot.x][tot.y]=1;
		q.pop();
		if(mp[tot.x][tot.y]==-1){
			cout<<tot.t;
			return 0;
		}
		if((tot.t+1<mp[tot.x+1][tot.y]||mp[tot.x+1][tot.y]==-1)&&tot.x+1<=300&&f[tot.x+1][tot.y]==0){k.x=tot.x+1,k.y=tot.y,k.t=tot.t+1;q.push(k);}
		if((tot.t+1<mp[tot.x-1][tot.y]||mp[tot.x-1][tot.y]==-1)&&tot.x-1>=0&&f[tot.x-1][tot.y]==0){k.x=tot.x-1,k.y=tot.y,k.t=tot.t+1;q.push(k);}
		if((tot.t+1<mp[tot.x][tot.y+1]||mp[tot.x][tot.y+1]==-1)&&tot.y+1<=300&&f[tot.x][tot.y+1]==0){k.x=tot.x,k.y=tot.y+1,k.t=tot.t+1;q.push(k);}
		if((tot.t+1<mp[tot.x][tot.y-1]||mp[tot.x][tot.y-1]==-1)&&tot.y-1>=0&&f[tot.x][tot.y-1]==0){k.x=tot.x,k.y=tot.y-1,k.t=tot.t+1;q.push(k);}
	}
	cout<<-1;
	return 0;
}
2024/8/25 16:25
加载中...