P1332求dalao指点
查看原帖
P1332求dalao指点
1127560
SR_G_B_ysqd1602楼主2024/7/31 15:19

想到用BFS,完成后进行测试,样例已对,交后听取WA声一片QAQ

惨惨的评测结果

#include<bits/stdc++.h>
using namespace std;
int n,m,a,b,top;
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
int d=1e6;
struct gry{
	int x,y;
}g[114514];
struct lz{
	int x,y,tm;
}l[114514];//领主
int t[1919810][4];
int vis[514][514];
void bfs(int a){
	int i=0,j=a;
	while(i<j){
		i++;
		int x=t[i][1],y=t[i][2],z=t[i][3];
		for(int i=0;i<4;i++){
			int xx=x+dx[i];
			int yy=y+dy[i];
			if(xx>=1&&yy>=1&&xx<=n&&yy<=m&&(vis[xx][yy]==-1||vis[xx][yy]>d)){
				t[++j][1]=xx;
				t[j][2]=yy;
				t[j][3]=z+1;
				if(vis[xx][yy]>d){
					l[vis[xx][yy]-d].tm=t[j][3];
				}
				vis[xx][yy]=t[j][3];
			}
		}
	}
}
int main(){
	cin>>n>>m>>a>>b;
	memset(vis,-1,sizeof(vis));
	for(int i=1;i<=a;i++){
		scanf("%d%d",&g[i].x,&g[i].y);
		t[++top][1]=g[i].x;
		t[top][2]=g[i].y;
		vis[g[i].x][g[i].y]=0;
	}
	for(int i=1;i<=b;i++){
		scanf("%d%d",&l[i].x,&l[i].y);
		vis[l[i].x][l[i].y]=i+d;
	}
	bfs(top);
	for(int i=1;i<=b;i++){
		printf("%d\n",l[i].tm);
	}
	return 0;
}
2024/7/31 15:19
加载中...