1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| #include<bits/stdc++.h> using namespace std; typedef long long ll; const int INF=0x3f3f3f3f; const int MAX_N=1e5+5; const int MOD=100003; int T; int n,m,q; int x,y; bool vis[2005][2005]; int dx[4]={1,0,-1,0}; int dy[4]={0,1,0,-1}; int dfs(int x,int y,int z) { int temp=0;
if(z==0) { if(!vis[x][y])temp++; vis[x][y]=1; for(int i=0;i<4;i++) { int nx=x+dx[i]; int ny=y+dy[i]; if(nx>0&&nx<=n&&ny>0&&ny<=m&&!vis[nx][ny]) { temp+=dfs(nx,ny,1); } }
} else{ if((!vis[x-1][y]&&!vis[x+1][y])||(!vis[x][y+1]&&!vis[x][y-1])&&z==1) { return 0; } else { if(!vis[x][y]) temp++; vis[x][y]=1; for(int i=0;i<4;i++) { int nx=x+dx[i]; int ny=y+dy[i]; if(nx>0&&nx<=n&&ny>0&&ny<=m&&!vis[nx][ny]) { temp+=dfs(nx,ny,1); } } }
} return temp; } int main(){ scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&m,&q); memset(vis,0,sizeof(vis)); while(q--) { scanf("%d%d",&x,&y); int temp=0; if(!vis[x][y]) {vis[x][y]=1;temp++;} printf("%d\n",dfs(x,y,0)+temp); } } return 0; }
|