Language: C++

#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
typedef pair<int,pair<int,int>> PP;
int r,w[2],h[2],x[2],y[2];
long long level[501][501][2];
bool used[501][501][2]={};
long long sparklingdaydream[501][501][2];
long long need[250005][2]={};
long long s[250005]={},d[250005]={};
int main(){
	while(1){
		memset(need,0,sizeof(need));
		memset(s,0,sizeof(s));
		memset(d,0,sizeof(d));
		memset(used,false,sizeof(used));
	priority_queue<PP,vector<PP>,greater<PP>>pque;
	scanf("%d",&r);
	if(r==0) break;
	scanf("%d %d %d %d",&w[0],&h[0],&x[0],&y[0]);
	for(int r=0;r<501;r++){
		for(int g=0;g<501;g++){
				sparklingdaydream[r][g][0]=1000000000000;
				level[r][g][0]=1000000000000;
			}
		}
	for(int i=1;i<=h[0];i++){
		for(int j=1;j<=w[0];j++){
			scanf("%lld",&level[j][i][0]);
		}
	}
	sparklingdaydream[x[0]][y[0]][0]=1;
	pque.push(make_pair(sparklingdaydream[x[0]][y[0]][0],make_pair(x[0],y[0])));
	int dx[3]={0,1,-1};
	int dy[3]={0,1,-1};
	while(!pque.empty()){
		PP p=pque.top();
		pque.pop();
		used[p.second.first][p.second.second][0]=true;
		for(int k=0;k<3;k++){
			for(int l=0;l<3;l++){
				if(k!=l && (k==0 || l==0)){
					if(!used[p.second.first+dx[k]][p.second.second+dy[l]][0]){
						if(p.second.first+dx[k]>=1 && p.second.first+dx[k]<=w[0] && p.second.second+dy[l]>=1 && p.second.second+dy[l]<=h[0]){
							long long h=p.first;
							sparklingdaydream[p.second.first+dx[k]][p.second.second+dy[l]][0]=max(h,level[p.second.first+dx[k]][p.second.second+dy[l]][0]);
							pque.push(make_pair(sparklingdaydream[p.second.first+dx[k]][p.second.second+dy[l]][0],make_pair(p.second.first+dx[k],p.second.second+dy[l])));
							used[p.second.first+dx[k]][p.second.second+dy[l]][0]=true;
						}
					}
					}
				}
			}
		}
	for(int r=0;r<501;r++){
		for(int g=0;g<501;g++){
				sparklingdaydream[r][g][1]=1000000000000;
				level[r][g][1]=1000000000000;
			}
		}
	scanf("%d %d %d %d",&w[1],&h[1],&x[1],&y[1]);
	for(int i=1;i<=h[1];i++){
		for(int j=1;j<=w[1];j++){
			scanf("%lld",&level[j][i][1]);
		}
	}
	sparklingdaydream[x[1]][y[1]][1]=1;
	pque.push(make_pair(sparklingdaydream[x[1]][y[1]][1],make_pair(x[1],y[1])));
	while(!pque.empty()){
		PP p=pque.top();
		pque.pop();
		used[p.second.first][p.second.second][1]=true;
		for(int k=0;k<3;k++){
			for(int l=0;l<3;l++){
				if(k!=l && (k==0 || l==0)){
					if(!used[p.second.first+dx[k]][p.second.second+dy[l]][1]){
						if(p.second.first+dx[k]>=1 && p.second.first+dx[k]<=w[1] && p.second.second+dy[l]>=1 && p.second.second+dy[l]<=h[1]){
							long long h=p.first;
							sparklingdaydream[p.second.first+dx[k]][p.second.second+dy[l]][1]=max(h,level[p.second.first+dx[k]][p.second.second+dy[l]][1]);
							pque.push(make_pair(sparklingdaydream[p.second.first+dx[k]][p.second.second+dy[l]][1],make_pair(p.second.first+dx[k],p.second.second+dy[l])));
							used[p.second.first+dx[k]][p.second.second+dy[l]][1]=true;
						}
					}
					}
				}
			}
		}
	int g=0;
	for(int i=1;i<=w[0];i++){
		for(int j=1;j<=h[0];j++){
			s[g]=sparklingdaydream[i][j][0];
			g++;
		}
	}
	sort(s,s+g);
	int eee=1;
	for(int i=0;i<g;i++){
		if(s[i]!=s[i+1]){
			for(int j=eee;j<=i+1;j++){
				need[j][0]=s[i];
				eee=i+2;
			}
		}
	}
	g=0;
	for(int i=1;i<=w[1];i++){
		for(int j=1;j<=h[1];j++){
			d[g]=sparklingdaydream[i][j][1];
			g++;
		}
	}
	sort(d,d+g);
	eee=1;
	for(int i=0;i<g;i++){
		if(d[i]!=d[i+1]){
			for(int j=eee;j<=i+1;j++){
				need[j][1]=d[i];
				eee=i+2;
			}
		}
	}
	long long ans=10000000000;
	for(int i=1;i<250005;i++){
		for(int j=0;j<2;j++){
			if(!need[i][j]){
			need[i][j]=10000000000000;
			}
		}
	}
	for(int i=0;i<=r;i++){
		ans=min(ans,need[i][0]+need[r-i][1]);
	}
	printf("%lld\n",ans);
	}
	return 0;
}

Compiler output:
a.cc: In function 'int main()':
a.cc:14:17: error: 'memset' was not declared in this scope
   14 |                 memset(need,0,sizeof(need));
      |                 ^~~~~~
a.cc:4:1: note: 'memset' is defined in header '<cstring>'; this is probably fixable by adding '#include <cstring>'
    3 | #include <queue>
  +++ |+#include <cstring>
    4 | using namespace std;