D - Coconuts
题 意:给你一个R*C的矩阵,有K堵墙,问你有几个联通快,每个联通块的元素是多少?
数据范围:
1<=R,C<=1e9
0<=k<=200
输入样例:

23 3
2
1 2
2 13 3
1
2 2

输出样例:

Case #1:
2
1 6
Case #2:
1
8

思 路 :因为墙很少,离散化,把可以浓缩的格子浓缩,记录一下宽度就好了,也就是说把可以离散化的格子离散化成一个格子,记录一下矩形的长和宽就好了。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<string>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<cmath>
using namespace std;
typedef long long ll;
const int maxn = 500+5;
map<int,int> mpx,mpy;
int xx[maxn],yy[maxn];
int vis[maxn][maxn];
int mp[maxn][maxn];
ll val[maxn];
ll vx[maxn],vy[maxn];
int n,m,k;
struct node{int x,y;
}a[maxn];struct Em{int x,y;int color;
};
int to[4][2] = {-1,0,1,0,0,-1,0,1};
queue<Em > que;
void init(){while(!que.empty())que.pop();mpx.clear();mpy.clear();memset(xx,0,sizeof(xx));memset(yy,0,sizeof(yy));memset(vx,0,sizeof(xx));memset(vy,0,sizeof(vy));memset(vis,0,sizeof(vis));memset(mp,0,sizeof(mp));memset(val,0,sizeof(val));
}
int main(){int t,Kase=1;scanf("%d",&t);while(t--){init();scanf("%d %d",&n,&m);scanf("%d",&k);int num1 = 1,num2 = 1;for(int i=1;i<=k;i++){int x,y;scanf("%d %d",&x,&y);a[num1].x = x;a[num2].y = y;xx[num1++] = x;yy[num2++] = y;}xx[num1++]=0;xx[num1++]=n+1;yy[num2++]=0;yy[num2++]=m+1;sort(xx+1,xx+num1);sort(yy+1,yy+num2);num1 = unique(xx+1,xx+num1)-(xx+1);num2 = unique(yy+1,yy+num2)-(yy+1);int pre=1,hang=1,lie=1;for(int i=1;i<=num1;i++){if(i!=1 && xx[i]!=pre+1) vx[hang]=xx[i]-pre-1,hang++;vx[hang]=1;pre = xx[i];mpx[xx[i]]=hang++;}pre=1;for(int i=1;i<=num2;i++){if(i!=1 && yy[i]!=pre+1)vy[lie]=yy[i]-pre-1,lie++;vy[lie]=1;pre=yy[i];mpy[yy[i]]=lie++;}hang-=2;lie-=2;for(int i=1;i<=hang+1;i++)for(int j=1;j<=lie+1;j++)mp[i][j]=1;for(int i=2;i<=hang;i++)for(int j=2;j<=lie;j++)mp[i][j]=0,vis[i][j]=0;for(int i=1;i<=k;i++){int temp1 = mpx[a[i].x],temp2 = mpy[a[i].y];mp[temp1][temp2] = 1;}int color=0;for(int i=2;i<=hang;i++){for(int j=2;j<=lie;j++){if(mp[i][j] == 1 || vis[i][j] == 1) continue;color++;Em em;em.x = i;em.y = j;em.color = color;vis[em.x][em.y]=1;que.push(em);while(!que.empty()){Em emq;emq = que.front();que.pop();val[emq.color] += vx[emq.x]*vy[emq.y];for(int i=0;i<4;i++){int fx = emq.x + to[i][0],fy = emq.y+to[i][1];if(fx>=2 && fx<=hang && fy>=2 && fy<=lie && mp[fx][fy]!=1 && !vis[fx][fy] ){Em _em;_em.x = fx;_em.y=fy;_em.color = color;vis[_em.x][_em.y] = 1;que.push(_em);}}}}}sort(val+1,val+color+1);printf("Case #%d:\n",Kase++);printf("%d\n",color);for(int i=1;i<=color;i++){printf("%I64d%c",val[i],i==color?'\n':' ');}}return 0;
}
/*
100
5 5
4
2 3
3 2
3 4
4 3
*/
//

HDU - 5925 D - Coconuts相关推荐

  1. HDU - 5925 Coconuts (二维离散化+求联通块)

    原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=5925 题意:求连通块的个数,以及每个联通块中点的个数. 数据范围:1e9 思路:离散化之后,dfs求联 ...

  2. hdu 5925.Coconuts

    http://acm.hdu.edu.cn/showproblem.php?pid=5925 题意:求一个图有多少连通块,按增序输出,但是图比较大需要离散化 像个傻子一样想了一下午怎么根据给出的点求能 ...

  3. HDU 5925 Coconuts

    2016 CCPC 东北四省赛 D. 一道好题. 现场写崩了. 赛后LSh跟我讲了一种离散化的做法, 没听懂. 题意 一个$R \cdot C (R, C\le 10^9)$ 的矩形点阵上有 $n   ...

  4. HDU 5925 Coconuts [二维离散化+dfs]

    题意: 有n*m的方阵 上面都是白的 其中有n个黑色的点 ,问你黑色的点把白色的点分成了几个部分,每个部分的点有多少. 分析: 因为给出的点最多只有200个,而整张图就有1e9个,所以离散化然后dfs ...

  5. HDU 1346(Coconuts, Revisited)

    暴力破解即可,从 n-1 开始枚举人数,最先找到的满足要求的人数即为最大人数. #include <iostream> using namespace std;int main() {in ...

  6. hdu 5925 搜索

    题意:一个图,n个障碍,求联通块 思路: 图很大,障碍物很少.把联通的障碍物块抠出来,然后暴力. 代码: #include<bits/stdc++.h> using namespace s ...

  7. mysql ansi quotes_mysql ANSI_QUOTES 这个sql_mode的作用(字段可以使用双引号)

    python数据类型详解 目录1.字符串2.布尔类型3.整数4.浮点数5.数字6.列表7.元组8.字典9.日期 1.字符串1.1.如何在Python中使用字符串a.使用单引号(')用单引号括起来表示字 ...

  8. 2016 长春东北赛---Coconuts(离散化+DFS)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5925 Problem Description TanBig, a friend of Mr. Frog ...

  9. HDU 4389 - X mod f(x)

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...

最新文章

  1. Android之一起玩转下拉刷新控件
  2. 作业4(列表增加或者修改)
  3. mysql errno : 1146_MySQL_MySQL复制出错 Last_SQL_Errno:1146的解决方法,背景:我们在做数据迁移或者 - phpStudy...
  4. 【渝粤题库】国家开放大学2021春2247社会工作政策法规题目
  5. HTML中confirm替换,Javascript直接Confirm()函数替换
  6. jquery ajax json转换出错Invalid JSON
  7. 准确率 召回率_机器学习中F值(F-Measure)、准确率(Precision)、召回率(Recall)
  8. Python 之父从 Dropbox 退
  9. vc如何打开plt图像_opencv_python从zero到hero————之图像基本操作01
  10. OpenCV 累加一个三通道矩阵的所有元素
  11. 微软欲对Silverlight进行部分开源(转载)
  12. ArcMAP 设置图层透明度
  13. 应邀参加51CTO专家座谈门诊——驱动开发技术探析【2008.11.20在线】
  14. jvm虚拟机_JVM虚拟机JVM简介
  15. Luogu1880 石子合并
  16. IIS 热启动设置的方法
  17. 关于应用程序无法正常启动0xc000007b的解决方案
  18. 最常见的开源游戏引擎_拔剑-浆糊的传说_新浪博客
  19. 最优化理论与方法-牛顿迭代法
  20. tomcat各版本下载

热门文章

  1. python的matplotlib安装包_matplotlib下载
  2. minio【docker-compose 部署minio分布式集群】
  3. 解释器模式 拾人牙慧
  4. 美国证券交易委员会发布加密货币指南
  5. 【NLP】词袋模型(bag of words model)和词嵌入模型(word embedding model)
  6. 解决:360 以下程序已被阻止运行
  7. Java中哪些Map是线程安全的?
  8. 后台接口接收数组,前端 ajax traditional参数必须为true
  9. mysql 复合索引,普通索引,索引分类总结
  10. TIL: 简单初始化iex