题目链接: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. java-并发解决方案

    并发产生数据不一致的原因:1.程序共享对象:2.多线程.3.基于1和2,取出来的数据可能不是最新的. 解决方案:只要是原子性操作,就不会出现问题.原子性操作,代表cpu会一直执行这个操作,知道结束. ...

  2. Base64加密与解密

    import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder; // 将 str进行 BASE64 编码 public static Stri ...

  3. SQL2008无法连接到.,及sa登录失败的总结

    尊重别人的劳动成果,我是转载别人的: 本文转载自- 红黑联盟http://www.2cto.com/database/201203/123089.html 出现问题 : 标题: 连接到服务器----- ...

  4. JSONP 的工作原理是什么?

    利用<script>标签没有跨域限制的"漏洞"来达到与第三方通讯的目的. 当需要通讯时,本站脚本创建一个<script>元素,地址指向第三方的API网址,形 ...

  5. Labeling Balls(变种拓扑)

    Labeling Balls Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/65536K (Java/Other) Tot ...

  6. openstack私有云布署实践【18 修改实例DHCP服务的DNS IP】

    某天,由于Linux服务器默认没有DNS缓存功能,每次服务器每访问一个http域名链接时,都会触发一次DNS域名解析查询,降低了调用API接口的时延,所以我司后续启用的内网的dnsmasq DNS服务 ...

  7. Pelican搭建静态博客

    前言 一直以来都希望拥有属于自己的个人博客,随性发点信息,写点技术感想,记录自己的生活,重要的是不受广告的影响.不被河蟹.不会担心有一天被莫名其妙地消失. 之前看过一篇文章:"像黑客一样写博 ...

  8. 移动端audio自动播放问题

    中秋临近,心血来潮想做个手机端贺卡,以前接触的移动端较少,虽然是个简单的贺卡,其实也蛮多坑的,简略说一下在制作贺卡的过程遇到的坑: 一:移动端的屏幕大小不能算作body的大小,因为手机浏览器头部都有网 ...

  9. 一个初学者的辛酸路程-FTP-9

    前言 今天,我要描述一个FTP的故事 主要内容 嗯,今天主要以阶梯性的形式来做一个FTP项目. 第一步: 我要实现这么一个功能,一个FTP客户端,1个FTP服务端,2端建立连接以后可以进行通讯. 服务 ...

  10. iOS学习之Runtime(一)

    一.Runtime简介 因为Objective-C是一门动态语言,所以它总是想办法把一些决定性工作从编译链接推迟到运行时,也就是说只有编译器是不够的,还需要一个运行时系统(runtime system ...