zoukankan      html  css  js  c++  java
  • 补上以前没有AC的PKU儿八死三

    额。。。DFS会RE。。。

    #include <stdio.h>
    #include
    <string.h>


    int mmm[1024][1024];
    int rj[1024][1024];

    int cnt, N, M, i1, j1, i2, j2;


    int q[1024*1024][2];
    const int dx[4= {10-10};
    const int dy[4= {010-1};

    void BFS(int i, int j)
    {
        mmm[i][j]
    =1;
        
    int front, rear, k;
        q[
    0][0= i;
        q[
    0][1= j;
        
    for(front = 0, rear = 1; front < rear; front++)
            
    for(k = 0; k < 4; k++)
            
    {
                i 
    = q[front][0+ dx[k];
                j 
    = q[front][1+ dy[k];
                
    if((i>=i1 && i<=i2  &&  j>=j1 && j<=j2) && mmm[i][j]==0)
                
    {
                    mmm[i][j] 
    = 1;
                    q[rear][
    0= i;
                    q[rear
    ++][1= j;
                }

            }

    }



    /*
    void DFS(int i, int j)
    {
        mmm[i][j]=1;
        if(i + 1 <= i2 && mmm[i + 1][j] == 0)
            DFS(i + 1, j);
        if(i - 1 >= i1 && mmm[i - 1][j] == 0)
            DFS(i - 1, j);
        if(j + 1 <= j2 && mmm[i][j + 1] == 0)
            DFS(i, j + 1);
        if(j - 1 >= j1 && mmm[i][j - 1] == 0)
            DFS(i, j - 1);
    }
    */



    void gra()
    {
        
    for(int ii = i1; ii <= i2; ii++ )
        
    {
            
    int jj = j1;
            
    while( jj <= j2 )
            
    {
                
    while(rj[ii][jj] > 0)
                
    {
                    jj 
    = rj[ii][jj];
                    
    if(jj > j2)
                        
    break;
                }

                
    if(jj > j2)
                    
    break;
                
    if( mmm[ii][jj] == 0 )
                
    {
                    
    //DFS(ii, jj);
                    BFS(ii, jj);
                    cnt
    ++;
                }

                jj
    ++;
            }

        }

    }



    int main()
    {

        scanf(
    "%d%d"&N, &M);
        
            
    for(int i = 0; i < M; i++ )
            
    {
                cnt 
    = 0;
                scanf(
    "%d%d%d%d"&i1, &j1, &i2, &j2);

                
    if(j1 > N) j1 = N;
                
    if(j2 > N) j2 = N;
                gra();
                
    for(int ci = i1; ci <= i2; ci ++)
                
    {
                    
    if(rj[ci][j1] < j2+1)
                        rj[ci][j1] 
    = j2+1;
                }

                printf(
    "%d\n", cnt);
            }


        
    return 0;
    }


  • 相关阅读:
    opencv出现问题:/usr/lib/x86_64-linux-gnu/libpng16.so.16: undefined reference to `inflateValidate@ZLIB_1.2.9'
    SCI-HUB 解锁论文的正确姿势——如何免费下载论文
    VS2019 实现与 Linux服务器同步
    VS Code 写代码实时同步服务器【Sftp插件】
    Docker实用技巧(二):容器与主机之间复制文件
    Docker实用技巧(一):镜像的备份/保存/加载/删除
    mycat注解及高可用(三)
    mycat分片及主从(二)
    SVN中trunk,branches,tags用法详解
    寄存器的英文全称
  • 原文地址:https://www.cnblogs.com/SQL/p/897785.html
Copyright © 2011-2022 走看看