zoukankan      html  css  js  c++  java
  • hdu_5925_Coconuts(离散化+dfs)

    题目链接:hdu_5925_Coconuts

    题意:

    给你一张很大的图,和小于200个的障碍点,问这张图中的联通块有多少个

    题解:

    由于障碍点只有200个,所以肯定有很多的空白部分,我们将这些空白部分 分成k个矩形来压缩,最终形成的压缩图就最大为400*400,然后dfs一下联通块就行了

     1 #include<bits/stdc++.h>
     2 #define F(i,a,b) for(int i=a;i<=b;i++)
     3 using namespace std;
     4 typedef long long ll;
     5 
     6 const int N=407;
     7 int t,ic=1,NN,C,n,edans,mp[N][N],x[N],y[N],X[N],Y[N],hs_x[N],hs_y[N],edx,edy,XX,YY,h[N],l[N];
     8 ll ans[N];
     9 
    10 void dfs(int i,int j)
    11 {
    12     ans[edans]+=1ll*h[i]*l[j],mp[i][j]=1;
    13     if(i>1&&!mp[i-1][j])dfs(i-1,j);
    14     if(i<XX&&!mp[i+1][j])dfs(i+1,j);
    15     if(j>1&&!mp[i][j-1])dfs(i,j-1);
    16     if(j<YY&&!mp[i][j+1])dfs(i,j+1);
    17 }
    18 
    19 int main()
    20 {
    21     scanf("%d",&t);
    22     while(t--)
    23     {
    24         scanf("%d%d%d",&NN,&C,&n);
    25         F(i,1,n)scanf("%d%d",x+i,y+i),hs_x[i]=x[i],hs_y[i]=y[i];
    26         hs_x[n+1]=0,hs_x[n+2]=NN+1,hs_y[n+1]=0,hs_y[n+2]=C+1;
    27         edx=edy=n+2,XX=YY=0,edans=0;
    28         sort(hs_x+1,hs_x+1+edx),edx=unique(hs_x+1,hs_x+1+edx)-hs_x-1;
    29         sort(hs_y+1,hs_y+1+edy),edy=unique(hs_y+1,hs_y+1+edy)-hs_y-1;
    30         F(i,2,edx)
    31         {
    32             if(hs_x[i]>hs_x[i-1]+1)h[++XX]=hs_x[i]-hs_x[i-1]-1;
    33             if(i!=edx)h[++XX]=1;
    34             F(j,1,n)if(x[j]==hs_x[i])X[j]=XX;
    35         }
    36         F(i,2,edy)
    37         {
    38             if(hs_y[i]>hs_y[i-1]+1)l[++YY]=hs_y[i]-hs_y[i-1]-1;
    39             if(i!=edy)l[++YY]=1;
    40             F(j,1,n)if(y[j]==hs_y[i])Y[j]=YY;
    41         }
    42         F(i,1,XX)F(j,1,YY)mp[i][j]=0;
    43         F(i,1,n)mp[X[i]][Y[i]]=1;
    44         F(i,1,XX)F(j,1,YY)if(!mp[i][j])ans[++edans]=0,dfs(i,j);
    45         sort(ans+1,ans+1+edans);
    46         printf("Case #%d:
    %d
    ",ic++,edans);
    47         F(i,1,edans)printf("%lld%c",ans[i]," 
    "[i==edans]);
    48     }
    49     return 0;
    50 }
    View Code
  • 相关阅读:
    Codeforces 834D The Bakery
    hdu 1394 Minimum Inversion Number
    Codeforces 837E Vasya's Function
    Codeforces 837D Round Subset
    Codeforces 825E Minimal Labels
    Codeforces 437D The Child and Zoo
    Codeforces 822D My pretty girl Noora
    Codeforces 799D Field expansion
    Codeforces 438D The Child and Sequence
    Codeforces Round #427 (Div. 2) Problem D Palindromic characteristics (Codeforces 835D)
  • 原文地址:https://www.cnblogs.com/bin-gege/p/5943868.html
Copyright © 2011-2022 走看看