哗啦啦的小彭玉染色问题

Time Limit: 1 Sec  Memory Limit: 256 MB

题目连接

http://acdream.info/problem?pid=1725

Description

哗啦啦,哗啦啦~

小彭玉很开心,拿着一堆海报就开始宣传明天要开始的哗啦啦大会了~

小彭玉很可爱,他的海报都是五颜六色的~

哗啦啦,哗啦啦~

小彭玉在一个巨大的宣传栏上贴了一大堆海报!

“真是好看呢!”,唐老师说道。

唐老师这时,就想出了一个题目,“这面宣传栏,最后能看见多少颜色呢?”

狗哥噗呲一笑,“这题太简单了!”

那你们会吗?

注意啦:后面贴的海报是会覆盖先前贴的~

Input

第一行,n,m,c,表示宣传栏有n行,m列,一开始颜色是c

第二行,  k,表示小彭玉一共贴了k张海报

接下来k行 x1i,y1i,x2i,y2i,ci,ti  六个字母,表示小彭玉在ti的时间,在贴上左下角坐标为(x1i,y1i),右上角坐标为(x2i,y2i),颜色为ci的海报

数据保证每一时间,小彭玉最多贴一张海报~

数据范围:

1<=n<2147483647   1<=m<2147483647   1<=c<2147483647

0<=k<=1000

1<=x1i<=n,1<=y1i<=m,1<=x2i<=n,1<=y2i<=n,1<=ci<2147483647

Output

输出一个整数,表示有多少颜色能够被看见

Sample Input

3 3 1
4
3 3 3 3 5 3
2 1 2 3 3 1
1 1 1 1 1 2
2 2 3 3 2 4

Sample Output

3

HINT

样例之后,宣传栏变成了:

1 2 2
1 2 2
1 3 1

所以颜色总共有3种

题意

题解:

离散之后,并查集优化一下就好了~

然后直接乱搞

http://pan.baidu.com/s/1sjoLGxn

代码:

//qscqesze
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define maxn 4005
#define mod 10007
#define eps 1e-9
int Num;
char CH[];
//const int inf=0x7fffffff; //§ß§é§à§é¨f§³
const int inf=0x3f3f3f3f;
/* inline void P(int x)
{
Num=0;if(!x){putchar('0');puts("");return;}
while(x>0)CH[++Num]=x%10,x/=10;
while(Num)putchar(CH[Num--]+48);
puts("");
}
*/
inline ll read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
inline void P(int x)
{
Num=;if(!x){putchar('');puts("");return;}
while(x>)CH[++Num]=x%,x/=;
while(Num)putchar(CH[Num--]+);
puts("");
}
//************************************************************************************** struct node
{
int x1,y1,x2,y2,t,c;
};
int n,m,c;
int k;
node a[maxn];
vector<int> q1;
vector<int> q2;
map<int,int> H1;
map<int,int> H2;
int fa[][];
int mp[][];
map<int,int> flag;
int ans; bool cmp(node b,node c)
{
return b.t>c.t;
} int fi(int x,int y)
{
if(y!=fa[x][y])
fa[x][y]=fi(x,fa[x][y]);
return fa[x][y];
} int main()
{
scanf("%d%d%d",&n,&m,&c);
q1.push_back(n);
q2.push_back(m);
q1.push_back();
q2.push_back();
scanf("%d",&k);
for(int i=;i<k;i++)
{
scanf("%d%d%d%d%d%d",&a[i].x1,&a[i].y1,&a[i].x2,&a[i].y2,&a[i].c,&a[i].t);
q1.push_back(a[i].x1);
q1.push_back(a[i].x2);
q2.push_back(a[i].y1);
q2.push_back(a[i].y2);
}
a[k].x1=,a[k].y1=,a[k].x2=n,a[k].y2=m,a[k].c=c,a[k].t=; sort(a,a+k+,cmp); sort(q1.begin(),q1.end());
sort(q2.begin(),q2.end());
q1.erase(unique(q1.begin(),q1.end()),q1.end());
q2.erase(unique(q2.begin(),q2.end()),q2.end()); for(int i=;i<q1.size();i++)
H1[q1[i]]=i+;
for(int i=;i<q2.size();i++)
H2[q2[i]]=i+; for(int i=;i<=q1.size()+;i++)
for(int j=;j<=q2.size()+;j++)
fa[i][j]=j; for(int p=;p<=k;p++)
{
for(int i=H1[a[p].x1];i<=H1[a[p].x2];i++)
{
for(int j=H2[a[p].y1];j<=H2[a[p].y2];j++)
{
j=fi(i,j);
if(j>H2[m])
break;
mp[i][j]=a[p].c;
if(!flag[a[p].c])
ans++;
flag[a[p].c]=;
fa[i][j]=j+;
}
}
}
printf("%d\n",ans);
}

acdream 1725 哗啦啦的小彭玉染色问题 离散化并查集的更多相关文章

  1. A - 小彭玉的扫荡食堂计划

    A - 小彭玉的扫荡食堂计划 Time Limit: 20000/10000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) ...

  2. BZOJ 2303 方格染色(带权并查集)

    要使得每个2*2的矩形有奇数个红色,如果我们把红色记为1,蓝色记为0,那么我们得到了这2*2的矩形里的数字异或和为1. 对于每个方格则有a(i,j)^a(i-1,j)^a(i,j-1)^a(i-1,j ...

  3. LightOJ 1009 二分图染色+BFS/种类并查集

    题意:有两个阵营的人,他们互相敌对,给出互相敌对的人,问同个阵营的人最多有多少个. 思路:可以使用种类并查集写.也可以使用使用二分图染色的写法,由于给定的点并不是连续的,所以排序离散化一下,再进行BF ...

  4. leetcode 886. 可能的二分法(DFS,染色,种类并查集)

    题目链接 886. 可能的二分法 题意: 给定一组 N 人(编号为 1, 2, ..., N), 我们想把每个人分进任意大小的两组. 每个人都可能不喜欢其他人,那么他们不应该属于同一组. 形式上,如果 ...

  5. 【牛客】小w的魔术扑克 (并查集?? 树状数组)

    题目描述 小w喜欢打牌,某天小w与dogenya在一起玩扑克牌,这种扑克牌的面值都在1到n,原本扑克牌只有一面,而小w手中的扑克牌是双面的魔术扑克(正反两面均有数字,可以随时进行切换),小w这个人就准 ...

  6. P5631-最小mex生成树【线段树,并查集】

    正题 题目链接:https://www.luogu.com.cn/problem/P5631 题目大意 \(n\)个点\(m\)条边的一张图,求\(mex\)值最小的一棵生成树. 解题思路 考虑比较暴 ...

  7. NOIP2010关押罪犯[并查集|二分答案+二分图染色 | 种类并查集]

    题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示 ...

  8. 线段树分治总结(线段树分治,线段树,并查集,树的dfn序,二分图染色)

    闲话 stO猫锟学长,满脑子神仙DS 网上有不少Dalao把线段树分治也归入CDQ分治? 还是听听YCB巨佬的介绍: 狭义:只计算左边对右边的贡献. 广义:只计算外部对内部的贡献. 看来可以理解为广义 ...

  9. POJ 3657 Haybale Guessing(区间染色 并查集)

    Haybale Guessing Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2384   Accepted: 645 D ...

随机推荐

  1. iOS中UITabelView

    1.概述 继承自UIScrollView,只能显示一列数据,只能纵向滑动.堪称UIKit里面最复杂的一个控件了,使用起来不算难,但是要用好并不容易.当使用的时候我们必须要考虑到后台数据的设计,tabl ...

  2. perl6 Socket: 发送HTTP请求

    sub MAIN(Str $host,Str $path, Int $port) { my $send = "GET $path HTTP/1.1\r\nHost: $host\r\n\r\ ...

  3. xss自动化攻击

    所需工具 [1.xssValidator] [2.phantomjs] [3.xss.js] /** * This is a basic phantomJS script that will be u ...

  4. C++之 extern C的作用详解

    extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码.加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C+ ...

  5. C++ 模板特化以及Typelist的相关理解

    近日,在学习的过程中第一次接触到了Typelist的相关内容,比如Loki库有一本Modern C++ design的一本书,大概JD搜了一波没有译本,英文版600多R,瞬间从价值上看到了这本书的价值 ...

  6. 在ubuntu 上安装sublime

    1.在sublime官网上下载sublime 2.将下载包解压到指定位置(自己决定) 3.进入解压文件里面 4.鼠标选中sublime_text,点击右键运行. 5.锁在启动器.

  7. u-boot启动第二阶段以及界面命令分析

    u-boot第一阶段完成了一些平台相关的硬件的配置,第一阶段所做的事情也是为第二阶段的准备,我们知道在第一阶段最后时搭建好C运行环境,之后调用了start_armboot(),那么很显然第二阶段从st ...

  8. 网页转图片,html生成图片,网页生成图片(基于linnux+phantomjs)和wkhtmltoimage

    安装扩展:  (1)下面是我在linux上的安装过程,如果没有安装git请先yum install git    安装casperjs    cd /    git clone git://githu ...

  9. 守护进程daemon函数

    #include  <unistd.h> int daemon(int nochdir,int noclose) 在创建精灵进程的时候,往往需要将精灵进程的工作目录修改为"/&q ...

  10. SNMP AGENT函数介绍

    http://wenku.baidu.com/view/6a7903a9d1f34693daef3e9f.html 一.  SNMP AGENT在SNMP框架中的位置 1.1 SNMP是被广泛接受并投 ...