tle+wa能者帮
查看原帖
tle+wa能者帮
615222
zzjxxgzs楼主2023/7/7 20:09
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
template <typename Tp>
void read(Tp &x){
	char c=getchar();x=0;int f=1;
	while(c<'0'||c>'9'){
		if(c=='-'){
			f=-1;
			c=getchar();
		}
		while(c>='0'&&c<='9'){
			x=x*10+c-'0';
			c=getchar();
		}
		x*=f;
	}
}
struct node{
	int x,y,c,w; 
	bool operator <(node b)const{
		return w>b.w;
	}

};
priority_queue<node>q;
int dx[]={0,1,0,-1,1,1,-1,-1,0,2,0,-2};
int dy[]={1,0,-1,0,1,-1,1,-1,2,0,-2,0};
int dw[]={0,0,0,0,2,2,2,2,2,2,2};
int a[105][105],dis[105][105];
int n,m;
void bfs(){
	memset(dis,0x3f,sizeof(dis));
	dis[1][1]=0;
	q.push((node){1,1,a[1][1],dis[1][1]});
	node cur,nxt;
	while(!q.empty()){
		cur=q.top();
		q.pop();
		if(dis[cur.x][cur.y]<cur.w){
			continue;
		}
		for(int i=0;i<12;i++){
			nxt.x=cur.x+dx[i];
			nxt.y=cur.y+dy[i];
			nxt.w=cur.w+dw[i];
            if(nxt.x<=0||nxt.x>m||nxt.y<=0||nxt.y>m){
            	continue;
			}
			nxt.c=a[nxt.x][nxt.y];
			if(!nxt.c){
				continue;
			}
			if(cur.c!=nxt.c){
				nxt.w++;
			}
			if(dis[nxt.x][nxt.y]>nxt.w){
				dis[nxt.x][nxt.y]=nxt.w;
				q.push(nxt);
			}
		}
	}
}
int main(){
	int x,y,c;
  	read(m);read(n);
	for(int i=1;i<=n;i++){
		read(x);
		read(y);
		read(c);
		a[x][y]=c+1;
	}
	bfs();
	if(!a[m][m]){
		int ans=min(dis[m][m-1],dis[m-1][m])+2;
		if(ans>=inf){
			cout<<"-1";
		}
		else{
			cout<<ans<<endl;
		}
	}
	else{
		if(dis[m][m]==inf){
			cout<<"-1";
		}
		else{
			cout<<dis[m][m]<<endl;
		}
	}
	return 0;
}
2023/7/7 20:09
加载中...