题目
代码:
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct node {int x,y,w;};
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
int mp[10005][10005],sx=1,sy=1,ex,ey,ans=1;
int L,n,m;
bool operator<(const node &a,const node &b) {return a.w>b.w;}
priority_queue<node> q;
void dfs(int x,int y) {
for(int i=0;i<4;i++) {
int xx=x+dx[i];
int yy=y+dy[i];
if(xx>0&&xx<=n&&yy>0&&yy<=n&&mp[xx][yy]!=-9) {
if(mp[xx][yy]<=0) {
if(mp[xx][yy]==-1) ex=xx;ey=yy;
mp[xx][yy]=-9;
dfs(xx,yy);
}
else {
if(ans>=mp[xx][yy]) {
ans+=mp[xx][yy];
mp[xx][yy]=-9;
dfs(xx,yy);
}
else {
q.push({xx,yy,mp[xx][yy]});
mp[xx][yy]=-9;
}
}
}
}
}
signed main() {
scanf("%lld%lld%lld",&L,&n,&m);
for(int k=1;k<=L;k++) {
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
scanf("%lld",&mp[i][j]);
}
}
if(mp[sx][sy]==-1) {
ex=sx;ey=sy;
}
mp[sx][sy]=-9;
dfs(sx,sy);
while(!q.empty()) {
if(ans<q.top().w) break;
ans+=q.top().w;
dfs(q.top().x,q.top().y);
q.pop();
}
while(!q.empty()) q.pop();
sx=ex;sy=ey;
}
printf("%lld",ans);
return 0;
}