TLE
  • 板块CF1301F Super Jaber
  • 楼主sieve
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/18 14:12
  • 上次更新2024/7/18 14:24:13
查看原帖
TLE
931664
sieve楼主2024/7/18 14:12
#include<bits/stdc++.h>
using namespace std;
int n,m,k;
const int N=1002;
int a[N][N];
int dis[42][N][N];
vector<pair<int,int> > v[42];
int dx[]={0,1,-1,0,0};
int dy[]={0,0,0,1,-1};
struct no{
	int x,y;
};
void bfs(int sum)
{
	queue<no> q;
	for(int i=0;i<v[sum].size();++i)
	{
		q.push(no{v[sum][i].first,v[sum][i].second});
		dis[sum][v[sum][i].first][v[sum][i].second]=0;
	}
	while(!q.empty())
	{
		no tmp=q.front();
		q.pop();
		for(int i=1;i<=4;++i)
		{
			int nx=tmp.x+dx[i];
			int ny=tmp.y+dy[i];
			if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&dis[sum][nx][ny]>dis[sum][tmp.x][tmp.y]+1)
			{
				q.push(no{nx,ny});
				dis[sum][nx][ny]=dis[sum][tmp.x][tmp.y]+1;
			}
		}
		for(int j=0;j<v[a[tmp.x][tmp.y]].size();++j)
		{
			int nx=v[a[tmp.x][tmp.y]][j].first;
			int ny=v[a[tmp.x][tmp.y]][j].second;
			if(dis[sum][nx][ny]>dis[sum][tmp.x][tmp.y]+1)
			{
				q.push(no{nx,ny});
				dis[sum][nx][ny]=dis[sum][tmp.x][tmp.y]+1;
			}
		}
	}
}
int main()
{
	cin>>n>>m>>k;
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=m;++j)
		{
			cin>>a[i][j];
			v[a[i][j]].push_back(make_pair(i,j));
		}
	}
	memset(dis,0x3f,sizeof(dis));
	for(int i=1;i<=k;++i) bfs(i);
	int t;
	cin>>t;
	while(t--)
	{
		int sx,sy,ex,ey;
		cin>>sx>>sy>>ex>>ey;
		int mn=abs(sx-ex)+abs(sy-ey);
		for(int i=1;i<=k;++i)
		{
			mn=min(mn,dis[i][sx][sy]+dis[i][ex][ey]+1);
//			cout<<dis[i][sx][sy]<<' '<<dis[i][ex][ey]+1<<'\n'; 
		}
		cout<<mn<<'\n';
	}
	return 0;
}

第 9 个点 T 了 。

2024/7/18 14:12
加载中...