暴力求调
查看原帖
暴力求调
723238
wukaichen888楼主2024/9/22 10:27

感觉读错题了,暴力过不去啊,样例都过了

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
const ll N=505;
int n,m,q,h[N][N],e[N][N],id[N],fa[N],a[N],b[N],c[N],d[N],ans[N];
int yyz(int x,int y){return (x-1)*m+y;}
int X(int x){return x/m+1;}
int Y(int x){return (x-1)%m+1;}
bool cmp(int x,int y){return h[X(x)][Y(x)]>h[X(y)][Y(y)];}
int find(int x){
	if(fa[x]==x) return x;
	return fa[x]=find(fa[x]);
}
void merge(int x,int y){fa[find(x)]=find(y);};
vector<int>v[N],g[N];
signed main(){
	scanf("%d%d%d",&n,&m,&q);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++) scanf("%d",&h[i][j]);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++) scanf("%d",&e[i][j]);
	for(int x1=1;x1<=n;x1++)
	for(int y1=1;y1<=m;y1++)
	for(int x2=1;x2<=n;x2++)
	for(int y2=1;y2<=m;y2++)
		if(h[x1][y1]-h[x2][y2]+e[x1][y1]>=abs(x1-x2)+abs(y1-y2)){
			v[yyz(x1,y1)].push_back(yyz(x2,y2));
		}
	for(int i=1;i<=n*m;i++) id[i]=fa[i]=i;
	sort(id+1,id+n*m+1,cmp);
	for(int i=1;i<=q;i++){
		scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]);
		ans[i]=-1;
	}
	for(int i=1;i<=n*m;i++){
		for(int to:v[id[i]]) merge(id[i],to);
		for(int j=1;j<=q;j++)
			if(find(yyz(a[j],b[j]))==find(yyz(c[j],d[j])))
				ans[j]=max(ans[j],h[X(id[i])][Y(id[i])]);
	}
	for(int i=1;i<=q;i++) printf("%d\n",ans[i]);
	return 0;
}
2024/9/22 10:27
加载中...