Calabash and Landlord

HDOJ-6665

  • 这里考察的是离散化的知识。
  • 首先将所有的x坐标和y坐标放入两个数组中,然后对这两个数组进行排序。因为总共的坐标数就5个所以这两个数组的大小只需要5就可以了(从1开始)。
  • 然后利用lower_bound函数查找每一个点的横纵坐标的位置。这样就可以将点对应起来。
  • 最后使用dfs查找图中有多少个连通分量就可以了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
int sx[5],tx[5];
int sy[5],ty[5];
int disx[5],disy[5];
bool vis[10][10];
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
bool in(int x,int y){
return x>0&&x<10&&y>0&&y<10;
}
void dfs(int x,int y){
vis[x][y]=1;
for(int i=0;i<4;i++){
int ex=x+dir[i][0];
int ey=y+dir[i][1];
if(in(ex,ey)){
if(!vis[ex][ey]){
dfs(ex,ey);
}
}
}
}
int main(){
int t;
cin>>t;
while(t--){
memset(vis,0,sizeof(vis));
int x,y;
for(int i=1;i<=4;i++){
cin>>x>>y;
tx[i]=sx[i]=x,ty[i]=sy[i]=y;
}
sort(tx+1,tx+5);
sort(ty+1,ty+5);
for(int i=1;i<=4;i++){
disx[i]=lower_bound(tx+1,tx+5,sx[i])-tx;//保证大于等于1但是小于5
disy[i]=lower_bound(ty+1,ty+5,sy[i])-ty;
disx[i]*=2;
disy[i]*=2;
}
for(int tex=disx[1];tex<=disx[2];tex++){
vis[tex][disy[1]]=vis[tex][disy[2]]=1;
}
for(int tex=disx[3];tex<=disx[4];tex++){
vis[tex][disy[3]]=vis[tex][disy[4]]=1;
}
for(int tey=disy[1];tey<=disy[2];tey++){
vis[disx[1]][tey]=vis[disx[2]][tey]=1;
}
for(int tey=disy[3];tey<=disy[4];tey++){
vis[disx[3]][tey]=vis[disx[4]][tey]=1;
}
int ans=0;
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
if(!vis[i][j]){
ans++;
dfs(i,j);
}
}
}
cout<<ans<<endl;
}
return 0;
}

HDOJ-6665(离散化+DFS求连通分量)的更多相关文章

  1. PAT 1013 Battle Over Cities (dfs求连通分量)

    It is vitally important to have all the cities connected by highways in a war. If a city is occupied ...

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

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

  3. UVa 572 油田(DFS求连通块)

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  4. [C++]油田(Oil Deposits)-用DFS求连通块

    [本博文非博主原创,均摘自:刘汝佳<算法竞赛入门经典>(第2版) 6.4 图] [程序代码根据书中思路,非独立实现] 例题6-12 油田(Oil Deposits,UVa572) 输入一个 ...

  5. HDU 4607 Park Visit 两次DFS求树直径

    两次DFS求树直径方法见 这里. 这里的直径是指最长链包含的节点个数,而上一题是指最长链的路径权值之和,注意区分. K <= R: ans = K − 1; K > R:   ans = ...

  6. DFS入门之二---DFS求连通块

    用DFS求连通块也是比较典型的问题, 求多维数组连通块的过程也称为--“种子填充”. 我们给每次遍历过的连通块加上编号, 这样就可以避免一个格子访问多次.比较典型的问题是”八连块问题“.即任意两格子所 ...

  7. UVA 572 Oil Deposits油田(DFS求连通块)

    UVA 572     DFS(floodfill)  用DFS求连通块 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format: ...

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

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

  9. hdu 1213 求连通分量(并查集模板题)

    求连通分量 Sample Input2 //T5 3 //n m1 2// u v2 34 5 5 12 5 Sample Output24 # include <iostream> # ...

随机推荐

  1. 【noi 2.6_1759】LIS 最长上升子序列(DP,3种解法)

    题意我就不写了.解法有3种: 1.O(n^2).2重循环枚举 i 和 j,f[i]表示前 i 位必选 a[i] 的最长上升子序列长度,枚举a[j]为当前 LIS 中的前一个数. 1 #include& ...

  2. AcWing 247. 亚特兰蒂斯 (线段树,扫描线,离散化)

    题意:给你\(n\)个矩形,求矩形并的面积. 题解:我们建立坐标轴,然后可以对矩形的横坐标进行排序,之后可以遍历这些横坐标,这个过程可以想像成是一条线从左往右扫过x坐标轴,假如这条线是第一次扫过矩形的 ...

  3. Educational Codeforces Round 89 (Rated for Div. 2) B. Shuffle (数学,区间)

    题意:有长为\(n\)的排列,其中\(x\)位置上的数为\(1\),其余位置全为\(0\),询问\(m\)次,每次询问一个区间,在这个区间内可以交换任意两个位置上的数,问\(1\)最后出现在不同位置的 ...

  4. PowerShell随笔2---初始命令

    PowerShell便捷之处 PowerShell中兼容运行cmd的命令,比如 ipconfig.ping命令等 PowerShell的命令更友好,可读性更强.比如停止一个服务 CMD命令:sc st ...

  5. [Golang]-6 超时处理、非阻塞通道操作、通道的关闭和遍历

    目录 超时处理 非阻塞通道操作 通道的关闭 通道遍历 超时处理 超时 对于一个连接外部资源,或者其它一些需要花费执行时间的操作的程序而言是很重要的. 得益于通道和 select,在 Go中实现超时操作 ...

  6. VRRP(Virtual Router Redundancy Protocol) 虚拟路由器冗余协议简介

    因工作中使用Keepalived配置Nginx代理和MySQL代理的高可用,而Keepalived是VRRP协议在linux上的软件实现.因此了解了下VRRP的基础. 1. VRRP技术的引入 随着I ...

  7. 关于vmwaretools

    今天安装Ubuntu16.04-i386,vmware15.5,使用的快速安装,然后安装vmwaretools出现问题:无法复制粘贴,顶部管理"重新安装vmware-tools"选 ...

  8. redis字符串-sds

    redis自己实现了一种名为简单动态字符串的抽象类型(simple dynamic string)作为字符串的表示.下面将简单介绍sds的实现原理. 一.sds的结构

  9. 三、mysql主从复制

    1 MySQL 主从复制 1.1 主从复制的含义 在 MySQL 多服务器的架构中,至少要有一个主节点(master),跟主节点相对的,我们把它叫做从节点(slave). 主从复制,就是把主节点的数据 ...

  10. jupyter-notebook kernel died

    问题 在floydhub上跑个github上面的项目, 开了notebook模式运行, 一运行一会儿就kernel died了... 解决 我这儿的问题, 后来发现是出在: 在notebook中, 对 ...