这道站外题90分求调
感谢帮助我的好人 好人一生平安
#include<bits/stdc++.h>
using namespace std;
int read(){
char ch=getchar();
int sum=0,k=1;
while(ch<'0'||ch>'9'){
if(ch=='-')k=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
sum=sum*10+(ch-'0');
ch=getchar();
}
return sum*k;
}
void print(int n){
if(n<0){
putchar('-');
n=-n;
}
if(n<=9)putchar(n+'0');
else{
print(n/10);
putchar(n%10+'0');
}
}
int n,m;
int a[1005][1005];
int b[1005][1005];
int c[10005];
int ans=0,cnt=0;
const int dx[]={1,-1,0,0};
const int dy[]={0,0,1,-1};
struct node{
int x,y;
};
queue<node>q;
void bfs(int sx,int sy){
int sum=0;
q.push((node){sx,sy});
b[sx][sy]=cnt;
while(!q.empty()){
node temp=q.front();
q.pop();
int xx=temp.x;
int yy=temp.y;
sum+=a[xx][yy];
for(int i=0;i<4;i++){
int nx=xx+dx[i];
int ny=yy+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&b[nx][ny]==0&&a[nx][ny]!=-1){
b[nx][ny]=cnt;
q.push((node){nx,ny});
}
}
}
c[cnt]=sum;
}
int main(){
freopen("C.in","r",stdin);
freopen("C.out","w",stdout);
n=read();
m=read();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
a[i][j]=read();
if(a[i][j]==-1)b[i][j]=-1;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]!=-1&&!b[i][j]){
cnt++;
bfs(i,j);
}
}
}
int ans=0;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==-1){
int d[5];
int cnt=0;
for(int k=0;k<4;k++){
int nx=i+dx[k];
int ny=j+dy[k];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]!=-1){
bool flag=0;
for(int i=1;i<=cnt;i++){
if(d[i]==b[nx][ny]){
flag=1;
break;
}
}
if(!flag)d[++cnt]=b[nx][ny];
}
}
for(int i=1;i<cnt;i++){
for(int j=i+1;j<=cnt;j++){
ans=max(ans,c[d[i]]+c[d[j]]);
}
}
}
}
}
print(ans);
return 0;
}