记录编号 129409 评测结果 AAAAAAAAAA
题目名称 [USACO Nov07] 最大的湖 最终得分 100
用户昵称 Gravatardevil 是否通过 通过
代码语言 C++ 运行时间 0.041 s
提交时间 2014-10-19 21:01:56 内存使用 4.11 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;

const int MAXN=705;
int n,m,S;int ans=0;
int G[MAXN][MAXN];
int vis[MAXN][MAXN];
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};

void dfs(int x,int y)
{
    vis[x][y]=1;
    for(int i=0;i<4;i++)
    {
        int nx=x+dx[i];
        int ny=y+dy[i];
        if(nx>=1&&nx<=n&&ny>=1&&ny<=m)
        {
            if(!vis[nx][ny]&&G[nx][ny])
            {
                dfs(nx,ny);
                S++;
            }
        }
    }
}
int main()
{
    freopen("lake.in","r",stdin);
    freopen("lake.out","w",stdout);
	int k;
	memset(G,0,sizeof(G));
	memset(vis,0,sizeof(vis));
	scanf("%d%d%d",&n,&m,&k);
    for(int i=0;i<k;i++)
    {
        int x,y;
        scanf("%d%d",&x,&y);
        G[x][y]=1;
    }
    for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++)
      {
          if(G[i][j]&&!vis[i][j])
          {
              S=1;dfs(i,j);
              if(S>ans) ans=S;
          }
      }
    /*for(int i=1;i<=n;i++)
    {
      for(int j=1;j<=m;j++)
      {
          printf("%d ",G[i][j]);
      }
      printf("\n");
    }*/
    printf("%d\n",ans);
	return 0;
}