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;
}
View Code

 

 
 
 
 
 
posted @ 2023-07-25 08:09  JMXZ  阅读(5)  评论(0)    收藏  举报