样例过,WA * 37
https://atcoder.jp/contests/abc351/submissions/52880799
#include<bits/stdc++.h>
typedef long long int ll;
using namespace std;
const int maxn=1010,d[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int n,m,val[maxn][maxn],ans=INT_MIN;
char a[maxn][maxn];
bool vis[maxn][maxn];
struct node{int x,y;};
queue<node>q;
int bfs(int xx,int yy){
// cout<<"---------\n";
// cout<<xx<<" "<<yy<<"\n";
while(q.size())q.pop();
int step=1,sum=val[xx][yy];
q.push({xx,yy});
vis[xx][yy]=1;
while(!q.empty()){
int x=q.front().x,y=q.front().y;
q.pop();
for(int i=0;i<4;i++){
int dx=x+d[i][0],dy=y+d[i][1];
if(dx>=1&&dx<=n&&dy>=1&&dy<=m&&!vis[dx][dy]&&val[dx][dy]){
step++,sum+=val[dx][dy],vis[dx][dy]=1;
q.push({dx,dy});
// cout<<dx<<" "<<dy<<"\n";
}
}
}
// cout<<"sum : "<<sum<<" step : "<<step<<"\n";
return sum-step;
}
int main(){
memset(vis,0,sizeof(vis));
cin>>n>>m;
for(int i=0;i<=n+1;i++){
for(int j=0;j<=m+1;j++)a[i][j]='.';
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)cin>>a[i][j];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]=='#')val[i][j]=0;
else{
if(a[i-1][j]!='#'&&a[i+1][j]!='#'&&a[i][j-1]!='#'&&a[i][j+1]!='#'){
val[i][j]=4;
if(i==1||i==n)val[i][j]--;
if(j==1||j==m)val[i][j]--;
}
}
}
}
// for(int i=1;i<=n;i++){
// for(int j=1;j<=m;j++)cout<<val[i][j]<<" ";cout<<"\n";
// }
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(!vis[i][j]&&val[i][j])ans=max(ans,bfs(i,j));
}
}
cout<<max(1,ans);
return 0;
}
/*
3 3
..#
#..
..#
*/
/*
3 5
.#...
.....
.#..#
00032
30440
00000
*/