Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>using namespace std;struct block{int l,r,u,d;};int n,m,num;int i,j,k;int a[505][505],mp[505][505];bool flag[505][505];block b[300010];int dx[]={0,0,1,-1};int dy[]={1,-1,0,0};void dfs(int x,int y){b[num].l=min(b[num].l,y);b[num].r=max(b[num].r,y);b[num].u=min(b[num].u,x);b[num].d=max(b[num].d,x);flag[x][y]=1; mp[x][y]=num;for (int i=0;i<4;i++){if (a[x+dx[i]][y+dy[i]]&&!flag[x+dx[i]][y+dy[i]]){