40分

//省略缺生源
const int dx[4]={1,-1,0,0};
const int dy[4]={0,0,1,-1};
struct node{
int x,y;
};
int n,m,ans,mp[N][N];
bool vis[N][N];
bool pd(int x,int y){
if(vis[x][y]==1||mp[x][y]==0) return 0;
return 1;
}
void bfs(int x,int y){
node t={x,y};
queue<node> q;
q.push(t);
while(q.size()){
t=q.front();
q.pop();
vis[t.x][t.y]=1;
for(int i=0;i<4;++i){
int nx=t.x+dx[i],ny=t.y+dy[i];
if(pd(nx,ny)){
t.x=nx,t.y=ny;
q.push(t);
}
}
}
}
signed main(){
n=read(),m=read();
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
scanf("%1d",&mp[i][j]);
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
if(mp[i][j]&&!vis[i][j]){
// write(i),p_,write(j),ed;
bfs(i,j);
++ans;
}
write(ans),ed;
return 0;
}