#include #define rep(i,a,b) for(int i=int(a);i> H >> W; rep(i,0,H)rep(j,0,W)cin >> V[i][j]; UnionFind uf; uf.init(H*W);//(i,j) → i*W + j rep(i,0,H)rep(j,0,W){ if(V[i][j]){ rep(k,0,4){ int x = dx[k] + j, y = dy[k] + i; if(x < 0 || x >= W || y < 0 || y >= H)continue; if(V[y][x])uf.unite(i * W + j, y * W + x); } } } set st; rep(i,0,H)rep(j,0,W)if(V[i][j])st.insert(uf.root(i * W + j)); cout << st.size() << endl; }