Description
1 2 3 4 5 6 7 ############################# 1 # | # | # | | # #####---#####---#---#####---# 2 # # | # # # # # #---#####---#####---#####---# 3 # | | # # # # # #---#########---#####---#---# 4 # # | | | | # # ############################# (Figure 1) # = Wall | = No wall - = No wall
Input
Output
Sample Input
4 7 11 6 11 6 3 10 6 7 9 6 13 5 15 5 1 10 12 7 13 7 5 13 11 10 8 10 12 13
Sample Output
5 9
#include<iostream>
using namespace std;
int a[1001][1001],p[1001][1001],d,i,j,maxm,ans,n,m;
void dfs(int x,int y){
p[x][y]=1;
d++;
if(a[x][y]>=8)
a[x][y]-=8;
else
if(p[x+1][y]==0)dfs(x+1,y);
if(a[x][y]>=4)
a[x][y]-=4;
else
if(p[x][y+1]==0)dfs(x,y+1);
if(a[x][y]>=2)
a[x][y]-=2;
else
if(p[x-1][y]==0)dfs(x-1,y);
if(a[x][y]>=1)
a[x][y]-=1;
else
if(p[x][y-1]==0)dfs(x,y-1);
}
int main(){
cin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(p[i][j]==0){
d=0;
dfs(i,j);
ans++;
if(d>maxm)maxm=d;
}
cout<<ans<<endl<<maxm;
return 0;
}