hdu_5925_Coconuts(离散化+dfs)
题目链接: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)的更多相关文章
- hdu4605 树状数组+离散化+dfs
Magic Ball Game Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
- Aizu 0531 "Paint Color" (坐标离散化+DFS or BFS)
传送门 题目描述: 为了宣传信息竞赛,要在长方形的三合板上喷油漆来制作招牌. 三合板上不需要涂色的部分预先贴好了护板. 被护板隔开的区域要涂上不同的颜色,比如上图就应该涂上5种颜色. 请编写一个程序计 ...
- 2016 长春东北赛---Coconuts(离散化+DFS)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5925 Problem Description TanBig, a friend of Mr. Frog ...
- UVALive 6663 Count the Regions --离散化+DFS染色
题意:给你n(n<=50)个矩形(左上角坐标和右下角坐标),问这些矩形总共将平面分成多少个部分.坐标值可能有1e9. 分析:看到n和坐标的范围,容易想到离散化,当时就没想到离散化以后怎么判断区域 ...
- hdu 4358 Boring counting 离散化+dfs序+莫队算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4358 题意:以1为根节点含有N(N <= 1e5)个结点的树,每个节点有一个权值(weight ...
- (好题)树状数组+离散化+DFS序+离线/莫队 HDOJ 4358 Boring counting
题目传送门 题意:给你一棵树,树上的每个节点都有树值,给m个查询,问以每个点u为根的子树下有多少种权值恰好出现k次. 分析:首先要对权值离散化,然后要将树形转换为线形,配上图:.然后按照右端点从小到大 ...
- UvaLive 6663 Count the Regions 离散化+DFS
链接:http://vjudge.net/problem/viewProblem.action?id=49408 题意:在平面内给出若干个矩形,求出它们能将整个平面分成多少份. 思路:刚開始一眼看到认 ...
- HDOJ-6665(离散化+DFS求连通分量)
Calabash and Landlord HDOJ-6665 这里考察的是离散化的知识. 首先将所有的x坐标和y坐标放入两个数组中,然后对这两个数组进行排序.因为总共的坐标数就5个所以这两个数组的大 ...
- hdu 5925 Coconuts 离散化+dfs
Coconuts Time Limit: 9000/4500 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem ...
随机推荐
- Java中修饰符
下面这张图应该大家都见过,根据图表来记忆最好理解 范围 private friendly(默认) protected public 当前类 √ √ √ √ 当前包中的类 √ √ √ 当前包中的类, ...
- trove manual installation 翻译
目标 此文件提供了一步一步的指导手动安装trove在一个现有OpenStack的环境为了开发. 该文件将不包括: OpenStack的设置 trove服务配置 要求 正在运行的OpenStack的环境 ...
- (Nginx学习一)安装和启动及对应文件夹介绍
nginx 安装和启动及对应文件夹介绍 1 安装 官网下载nginx文件 http://nginx.org/en/download.html 解压即可 2 文件夹介绍 在解压后nginx压缩包后发现 ...
- 中兴电信光纤猫F450获取管理员密码方法
初衷:为了完成端口映射,一开始以为电信光猫不支持自定义路由,因为通过useradmin登录进去后没有找到对应的选项.一番了解之后,原来光猫有超级密码,电信装机时是不会告诉你的,电信客服一般也不会告诉你 ...
- Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8
1,Project Structure里确认两个地方:Project sdk以及project language level 2,Project Structure->Modules里Sourc ...
- js字符串操作
javascript中字符串常用操作总结.JS字符串操作大全 String对象属性 (1) length属性 length算是字符串中非常常用的一个属性了,它的功能是获取字符串的长度.当然需要注意的是 ...
- 使用 JUnit 报错 java.lang.Exception: No runnable methods
错误详情如下: java.lang.Exception: No runnable methods at org.junit.runners.BlockJUnit4ClassRunner.validat ...
- Firewalld防火墙
Firewalld服务是红帽RHEL7系统中默认的防火墙管理工具,特点是拥有运行时配置与永久配置选项且能够支持动态更新以及"zone"的区域功能概念,使用图形化工具firewall ...
- 绿色版的mysql安装配置方式
解压下载好的压缩包 copy 一份my-default.ini改名字为my.ini为mysql的配置文件 打开my.ini 修改配置文件 默认的原版文件为 # For advice on how to ...
- informix数据迁移工具使用介绍
一.dbschema USAGE: dbschema [-q] [-t tabname] [-s user] [-p user] [-r rolename] [-f procname] ...