【题目链接】 http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0531

【题目大意】

  给出一张图,和一些矩形障碍物,求该图没被障碍物覆盖的部分被划分为几个连通块

【题解】

  首先对图中的点进行离散化,对于一个障碍物来说,
  我们将其看做左闭右开上闭下开的图形,所以在离散的时候只要离散障碍物的点即可。
  之后我们利用imos积累法得出哪些部分是障碍物,就可以统计连通块了。

【代码】

#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
#include <utility>
#include <queue>
using namespace std;
const int N=1050,dx[]={1,-1,0,0},dy[]={0,0,1,-1};
int n,H,W,X1[N],X2[N],Y1[N],Y2[N];
int imos[2*N][2*N];
int compress(int *x1,int *x2,int w){
vector<int>xs;
for(int i=0;i<n;i++){
int tx1=x1[i],tx2=x2[i];
if(1<=tx1&&tx1<w)xs.push_back(tx1);
if(1<=tx2&&tx2<w)xs.push_back(tx2);
}xs.push_back(0);xs.push_back(w);
sort(xs.begin(),xs.end());
xs.erase(unique(xs.begin(),xs.end()),xs.end());
for(int i=0;i<n;i++){
x1[i]=find(xs.begin(),xs.end(),x1[i])-xs.begin();
x2[i]=find(xs.begin(),xs.end(),x2[i])-xs.begin();
}return xs.size()-1;
}
int bfs(){
int ans=0;
for(int i=0;i<H;i++){
for(int j=0;j<W;j++){
if(imos[i][j])continue;
ans++;
queue<pair<int,int> >que;
que.push(make_pair(j,i));
while(!que.empty()){
int nx=que.front().first,ny=que.front().second;
que.pop();
for(int i=0;i<4;i++){
int tx=nx+dx[i],ty=ny+dy[i];
if(tx<0||W<tx||ty<0||H<ty||imos[ty][tx]>0)continue;
que.push(make_pair(tx,ty));
imos[ty][tx]=1;
}
}
}
}return ans;
}
int main(){
while(~scanf("%d%d",&W,&H),W||H){
scanf("%d",&n);
for(int i=0;i<n;i++)scanf("%d%d%d%d",&X1[i],&Y1[i],&X2[i],&Y2[i]);
memset(imos,0,sizeof(imos));
W=compress(X1,X2,W);H=compress(Y1,Y2,H);
for(int i=0;i<n;i++){
imos[Y1[i]][X1[i]]++;
imos[Y1[i]][X2[i]]--;
imos[Y2[i]][X1[i]]--;
imos[Y2[i]][X2[i]]++;
}for(int i=0;i<H;i++)for(int j=1;j<W;j++)imos[i][j]+=imos[i][j-1];
for(int j=0;j<W;j++)for(int i=1;i<H;i++)imos[i][j]+=imos[i-1][j];
printf("%d\n",bfs());
}return 0;
}

  

AOJ 0531:Paint Color(二维离散+imos)的更多相关文章

  1. 多尺度二维离散小波重构waverec2

    clc,clear all,close all; load woman; [c,s]=wavedec2(X,2,'haar');%进行2尺度二维离散小波分解.分解小波函数haar %多尺度二维离散小波 ...

  2. 单尺度二维离散小波重构(逆变换)idwt2

    clc,clear all,close all; load woman; %单尺度二维离散小波分解.分解小波函数haar [cA,cH,cV,cD]=dwt2(X,'haar'); %单尺度二维离散小 ...

  3. 多尺度二维离散小波分解wavedec2

    对X进行N尺度小波分解 [C,S]=wavedec2(X,N,'wname'); clc,clear all,close all; load woman; [c,s]=wavedec2(X,2,'db ...

  4. 单尺度二维离散小波分解dwt2

    clc,clear all,close all; load woman; [cA,cH,cV,cD]=dwt2(X,'haar');%单尺度二维离散小波分解.分解小波函数haar figure,ims ...

  5. c语言数字图像处理(六):二维离散傅里叶变换

    基础知识 复数表示 C = R + jI 极坐标:C = |C|(cosθ + jsinθ) 欧拉公式:C = |C|ejθ 有关更多的时域与复频域的知识可以学习复变函数与积分变换,本篇文章只给出DF ...

  6. 混沌数学之CircuitChaotic(二维离散电路混沌系统)

    相关软件参见:混沌数学之离散点集图形DEMO 相关代码: // http://wenku.baidu.com/link?url=yg_gE7LUXCg2mXRp-ZZdfRXXIkcNj8YOhvN7 ...

  7. 二维离散平稳小波重构iswt2

    clc,clear all,close all; load woman; [cA,cH,cV,cD]=swt2(X,2,'haar');%用haar小波基进行2尺度平稳小波分解 Y=iswt2(cA, ...

  8. 二维离散平稳小波分解swt2

    对信号X进行N尺度平稳小波分解 [A,H,V,D]=swt2(X,N,'wname'); clc,clear all,close all; load woman; [cA,cH,cV,cD]=swt2 ...

  9. Aizu - 0531 Paint Color

    白书例题,直接用书上的暴力压缩坐标是可以的,但是看了别人的博客的写法,大概是理解了思想但是看不懂为什么那么压缩,先放这,等明白了补上 #define debug #include<stdio.h ...

随机推荐

  1. Google浏览器历史版本下载地址和驱动器对应关系地址分享

    Google浏览器历史版本下载地址https://www.slimjet.com/chrome/google-chrome-old-version.php google webdriver下载地址分享 ...

  2. Linux认知之旅【05 进一步了解Linux装软件】!

    一.Linux软件管理系统 二.Linux还可以用源码安装 三.Linux软件配置

  3. OZ常见错误解决办法

    执行成功 错误信息解决办法 libvirt.libvirtError: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No ...

  4. TensorFlow——深度学习笔记

    深度学习与传统机器学习的区别 传统机器学习输入的特征为人工提取的特征,例如人的身高.体重等,深度学习则不然,它接收的是基础特征,例如图片像素等,通过多层复杂特征提取获得. 深度学习.人工智能.机器学习 ...

  5. pytorch:EDSR 生成训练数据的方法

    Pytorch:EDSR 生成训练数据的方法 引言 Winter is coming 正文 pytorch提供的DataLoader 是用来包装你的数据的工具. 所以你要将自己的 (numpy arr ...

  6. TypeScript类型定义文件(*.d.ts)生成工具

    在开发ts时,有时会遇到没有d.ts文件的库,同时在老项目迁移到ts项目时也会遇到一些文件需要自己编写声明文件,但是在需要的声明文件比较多的情况,就需要自动生产声明文件.用过几个库.今天简单记录一下. ...

  7. 雅礼集训 Day7 T1 Equation 解题报告

    Reverse 题目背景 小\(\text{G}\)有一个长度为\(n\)的\(01\)串\(T\),其中只有\(T_S=1\),其余位置都是\(0\).现在小\(\text{G}\)可以进行若干次以 ...

  8. codeforces ~ 1009 B Minimum Ternary String(超级恶心的思维题

    http://codeforces.com/problemset/problem/1009/B B. Minimum Ternary String time limit per test 1 seco ...

  9. bzoj1382 1935: [Shoi2007]Tree 园丁的烦恼

    1935: [Shoi2007]Tree 园丁的烦恼 Time Limit: 15 Sec  Memory Limit: 357 MBSubmit: 1261  Solved: 578[Submit] ...

  10. 一种机制,与js类似

    我们知道,当两个条件进行逻辑与操作的时候,其中任何一个条件为假,则表达式的结果为假.所以,遇到(A 且 B)这种表达式,如果A为假的话,B是不是真假都无所谓了,当遇到一个假条件的时候,程序也就没有必要 ...