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 ...
随机推荐
- 遍历HashMap的最佳方式
public static void printMap(Map mp) { Iterator it = mp.entrySet().iterator(); while (it.hasNext()) { ...
- elasticsearch+spark+hbase 整合
1.用到的maven依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>sp ...
- syntaxhighlighter的使用
第一 解压压缩包,scripts文件夹中包含了各种语言的JS文件,在styles文件夹中是各种显示高亮的主题 第二 如何使用?首先要引入其核心javascript文件shCore.js和核心CSS文件 ...
- 通过Windows常见性能计数器分析服务器性能瓶颈
转载 http://www.cnblogs./junzhongxu/archive/2011/02/15/1954889.html 监测对象 Ø System(系统) l %Total Process ...
- 关于php数组是否要声明
不知道大家有没有这样玩过php数组,正常情况下直接不声明,直接使用数组,会发现输出的与声明后的结果是一样的.
- HDU 5903 Square Distance
$dp$预处理,贪心. 因为$t$串前半部分和后半部分是一样的,所以只要构造前一半就可以了. 因为要求字典序最小,所以肯定是从第一位开始贪心选择,$a,b,c,d,...z$,一个一个尝试过去,如果发 ...
- 在GNU/Linux下将CD音乐转为mp3
以前我欣赏古典音乐都是听的CD,因而珍藏了不少光盘以及下载到电脑上的ape与flac格式的音乐文件.随着手机硬件性能(如电池续航能力.处理器速度.音质.存储容量等)和软件功能(音乐播放器对于曲目的管理 ...
- android自定义控件,其三个父类构造方法有什么区别
android自定义控件时,通常需要重写父类构造函数.这三个够找函数具体啥时调用? public View (Context context) 是在java代码创建视图的时候被调用,如果是从xml填充 ...
- web前端-雅虎34条规则优化
1.尽量减少HTTP请求次数 终端用户响应的时间中,有80%用于下载各项内容.这部分时间包括下载页面中的图像.样式表.脚本.Flash等.通过减少页面中的元素可以减少HTTP请求的次数.这是 ...
- 用DriverBackUp备份了文件 装好系统后怎么把备份的驱动文件还原
1.打开DriverBackUp 2.菜单栏选择Restore 3.选择open backup file 4.找到备份文件位置,并选择.bki后缀的文件 5.点击"打开" 6.勾选 ...