题目链接:hdu_5925_Coconuts

题意:

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

题解:

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

 #include<bits/stdc++.h>
#define F(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
typedef long long ll; const int N=;
int t,ic=,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];
ll ans[N]; void dfs(int i,int j)
{
ans[edans]+=1ll*h[i]*l[j],mp[i][j]=;
if(i>&&!mp[i-][j])dfs(i-,j);
if(i<XX&&!mp[i+][j])dfs(i+,j);
if(j>&&!mp[i][j-])dfs(i,j-);
if(j<YY&&!mp[i][j+])dfs(i,j+);
} int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&NN,&C,&n);
F(i,,n)scanf("%d%d",x+i,y+i),hs_x[i]=x[i],hs_y[i]=y[i];
hs_x[n+]=,hs_x[n+]=NN+,hs_y[n+]=,hs_y[n+]=C+;
edx=edy=n+,XX=YY=,edans=;
sort(hs_x+,hs_x++edx),edx=unique(hs_x+,hs_x++edx)-hs_x-;
sort(hs_y+,hs_y++edy),edy=unique(hs_y+,hs_y++edy)-hs_y-;
F(i,,edx)
{
if(hs_x[i]>hs_x[i-]+)h[++XX]=hs_x[i]-hs_x[i-]-;
if(i!=edx)h[++XX]=;
F(j,,n)if(x[j]==hs_x[i])X[j]=XX;
}
F(i,,edy)
{
if(hs_y[i]>hs_y[i-]+)l[++YY]=hs_y[i]-hs_y[i-]-;
if(i!=edy)l[++YY]=;
F(j,,n)if(y[j]==hs_y[i])Y[j]=YY;
}
F(i,,XX)F(j,,YY)mp[i][j]=;
F(i,,n)mp[X[i]][Y[i]]=;
F(i,,XX)F(j,,YY)if(!mp[i][j])ans[++edans]=,dfs(i,j);
sort(ans+,ans++edans);
printf("Case #%d:\n%d\n",ic++,edans);
F(i,,edans)printf("%lld%c",ans[i]," \n"[i==edans]);
}
return ;
}

hdu_5925_Coconuts(离散化+dfs)的更多相关文章

  1. hdu4605 树状数组+离散化+dfs

    Magic Ball Game Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  2. Aizu 0531 "Paint Color" (坐标离散化+DFS or BFS)

    传送门 题目描述: 为了宣传信息竞赛,要在长方形的三合板上喷油漆来制作招牌. 三合板上不需要涂色的部分预先贴好了护板. 被护板隔开的区域要涂上不同的颜色,比如上图就应该涂上5种颜色. 请编写一个程序计 ...

  3. 2016 长春东北赛---Coconuts(离散化+DFS)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5925 Problem Description TanBig, a friend of Mr. Frog ...

  4. UVALive 6663 Count the Regions --离散化+DFS染色

    题意:给你n(n<=50)个矩形(左上角坐标和右下角坐标),问这些矩形总共将平面分成多少个部分.坐标值可能有1e9. 分析:看到n和坐标的范围,容易想到离散化,当时就没想到离散化以后怎么判断区域 ...

  5. hdu 4358 Boring counting 离散化+dfs序+莫队算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4358 题意:以1为根节点含有N(N <= 1e5)个结点的树,每个节点有一个权值(weight ...

  6. (好题)树状数组+离散化+DFS序+离线/莫队 HDOJ 4358 Boring counting

    题目传送门 题意:给你一棵树,树上的每个节点都有树值,给m个查询,问以每个点u为根的子树下有多少种权值恰好出现k次. 分析:首先要对权值离散化,然后要将树形转换为线形,配上图:.然后按照右端点从小到大 ...

  7. UvaLive 6663 Count the Regions 离散化+DFS

    链接:http://vjudge.net/problem/viewProblem.action?id=49408 题意:在平面内给出若干个矩形,求出它们能将整个平面分成多少份. 思路:刚開始一眼看到认 ...

  8. HDOJ-6665(离散化+DFS求连通分量)

    Calabash and Landlord HDOJ-6665 这里考察的是离散化的知识. 首先将所有的x坐标和y坐标放入两个数组中,然后对这两个数组进行排序.因为总共的坐标数就5个所以这两个数组的大 ...

  9. hdu 5925 Coconuts 离散化+dfs

    Coconuts Time Limit: 9000/4500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem ...

随机推荐

  1. CentOS7 离线安装gcc/pcre-devel/openssl-devel/zlib-devel

    1. 解压CentOS7操作系统安装镜像,进入到CentOS-7.0-1406-x86_64-DVD\Packages目录,这下面存储了很多rpm包. 2. 找到下面列出的rpm包,上传到CentOS ...

  2. 诡异的数学,数字问题 - leetcode

    134. Gas Station 那么这题包含两个问题: 1. 能否在环上绕一圈? 2. 如果能,这个起点在哪里? 第一个问题,很简单,我对diff数组做个加和就好了,leftGas = ∑diff[ ...

  3. Linux网络管理之net-tools VS iproute2

    查看网卡及IP ifconfig ip link [show] --------- ifconfig -a ip addr show 激活和停止网络接口 ifconfig eth0 up/down i ...

  4. Java 后台sql注入

    JdbcTemplate.update(sql, ArrayList.toArray()) Connection conn = null; PreparedStatement ps = null; c ...

  5. wpf 寻找某个控件下的子控件

    /// <summary> /// 寻找某个控件下的子控件 /// </summary> /// <typeparam name="ChildType" ...

  6. linux重要命令

    echo echo命令用于在终端显示字符串或输出变量提取后的值,格式为:"echo [字符串 | $变量]". 将指定字符串输出到终端屏幕: [root@linuxprobe ~] ...

  7. 学习smail注入遇到的坑

    1.将需要被反编译的apk包解开之后,找到MainActivity,然后在OnCreate中添加需要加入注入的smail代码: Java代码: /** * 获取Android id * * @para ...

  8. JNDI实现服务器(tomcat)与数据库(mysql)连接的数据源配置以及获取连接的java代码

    ->首先将mysql的jar包导入到tomcat/lib文件夹下 ->然后在tomcat/conf/context.xml文件中配置以下内容 <Resource name=" ...

  9. Topself 方便调试的Window服务框架

    Installing Topshelf nuget Install-Package Topshelf public class TownCrier { readonly Timer _timer; p ...

  10. linux开发

    linux开发资料 01 02 03 04 05 06 07 08 09 10 11 1 2 3 4 5 21 22 23 24 25