CF1829E The Lakes
>>>迭代时,不要初始化
》》》想清楚再coding

/* #include<bits/stdc++.h> using namespace std; const int X[]={1,0,-1,0}; const int Y[]={0,1,0,-1}; int n,m,a[1005][1005],f[1005][1005],s,maxs; void dfs(int x,int y) { s+=a[x][y];//ÀÛ¼Ó for(int i=0;i<4;i++) { int x_=x+X[i],y_=y+Y[i]; if(x_<1||y_<1||x_>n||y_>m||!a[x_][y_]||f[x_][y_]) continue; f[x_][y_]=1;//±ê¼Ç dfs(x_,y_); } } void sol() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { scanf("%d",&a[i][j]); f[i][j]=0; } } maxs=0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(f[i][j]||!a[i][j]) continue; s=0;//ÇåÁã f[i][j]=1;//±ê¼Ç dfs(i,j); maxs=max(maxs,s);//¼ÆË㵱ǰ×î´óµÄ×ÜȨֵ } } cout<<maxs<<endl; } int main() { int t; cin>>t; while(t--) sol(); return 0; } */ #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<bits/stdc++.h> #define ll long long #define ddd printf("--------------debug\n"); using namespace std; int dx[5]={0,-1,0,1,0}; int dy[5]={0,0,1,0,-1}; int n,m; int a[1500][1500],vis[1500][1500],ans=0,tmp_ans=0; void dfs(int x,int y)//dfs ¦Ì¨¹¡ä¨² { tmp_ans+=a[x][y],vis[x][y]=1; for(int i=1;i<=4;i++) { int nx=x+dx[i],ny=y+dy[i]; if(nx>n||nx<1||ny<1||ny>m||a[nx][ny]==0||vis[nx][ny]) continue; dfs(nx,ny); } //cout<<tmp_ans<<endl; } int main() { ios::sync_with_stdio(false);cin.tie(0); int T;cin>>T; while(T--) { //memset(vis,0,sizeof(vis)); cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>a[i][j]; // cout<<a[i][j]; vis[i][j]=0; } } ans=0;tmp_ans=0; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(vis[i][j]||!a[i][j]) continue; tmp_ans=0; dfs(i,j); ans=max(ans,tmp_ans); //cout<<tmp_ans<<endl; } } cout<<ans<<'\n'; } return 0; }