acdream 1725 哗啦啦的小彭玉染色问题 离散化并查集
哗啦啦的小彭玉染色问题
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 哗啦啦的小彭玉染色问题 离散化并查集的更多相关文章
- A - 小彭玉的扫荡食堂计划
A - 小彭玉的扫荡食堂计划 Time Limit: 20000/10000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) ...
- BZOJ 2303 方格染色(带权并查集)
要使得每个2*2的矩形有奇数个红色,如果我们把红色记为1,蓝色记为0,那么我们得到了这2*2的矩形里的数字异或和为1. 对于每个方格则有a(i,j)^a(i-1,j)^a(i,j-1)^a(i-1,j ...
- LightOJ 1009 二分图染色+BFS/种类并查集
题意:有两个阵营的人,他们互相敌对,给出互相敌对的人,问同个阵营的人最多有多少个. 思路:可以使用种类并查集写.也可以使用使用二分图染色的写法,由于给定的点并不是连续的,所以排序离散化一下,再进行BF ...
- leetcode 886. 可能的二分法(DFS,染色,种类并查集)
题目链接 886. 可能的二分法 题意: 给定一组 N 人(编号为 1, 2, ..., N), 我们想把每个人分进任意大小的两组. 每个人都可能不喜欢其他人,那么他们不应该属于同一组. 形式上,如果 ...
- 【牛客】小w的魔术扑克 (并查集?? 树状数组)
题目描述 小w喜欢打牌,某天小w与dogenya在一起玩扑克牌,这种扑克牌的面值都在1到n,原本扑克牌只有一面,而小w手中的扑克牌是双面的魔术扑克(正反两面均有数字,可以随时进行切换),小w这个人就准 ...
- P5631-最小mex生成树【线段树,并查集】
正题 题目链接:https://www.luogu.com.cn/problem/P5631 题目大意 \(n\)个点\(m\)条边的一张图,求\(mex\)值最小的一棵生成树. 解题思路 考虑比较暴 ...
- NOIP2010关押罪犯[并查集|二分答案+二分图染色 | 种类并查集]
题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示 ...
- 线段树分治总结(线段树分治,线段树,并查集,树的dfn序,二分图染色)
闲话 stO猫锟学长,满脑子神仙DS 网上有不少Dalao把线段树分治也归入CDQ分治? 还是听听YCB巨佬的介绍: 狭义:只计算左边对右边的贡献. 广义:只计算外部对内部的贡献. 看来可以理解为广义 ...
- POJ 3657 Haybale Guessing(区间染色 并查集)
Haybale Guessing Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2384 Accepted: 645 D ...
随机推荐
- SQL server(到主机的TCPIPl连接失败的问题)
1 首先要做的是在sql新建查询里输入 exec sys.sp_readerrorlog 0, 1, 'listening' 运行后 会显示你的sql 正在运行的tcp/ip接口 看看是否和你java ...
- layui实现类似于bootstrap的模态框功能
以前习惯了bootstrap的模态框,突然换了layui,想的用layui实现类似于bootstrap的模态框功能. 用到了layui的layer模块,例如: <!DOCTYPE html> ...
- 对RSA的认识
#没有经过专业老师的指导,所以您在阅读本文时建议参考即可. 学习视屏:https://www.youtube.com/watch?v=TqX0AHHwRYQ https://www.youtub ...
- flask插件系列之SQLAlchemy基础使用
sqlalchemy是一个操作关系型数据库的ORM工具.下面研究一下单独使用和其在flask框架中的使用方法. 直接使用sqlalchemy操作数据库 安装sqlalchemy pip install ...
- 141.Linked List Cycle---双指针
题目链接 题目大意:给出一个链表,判断该链表是否有环,空间复杂度最好控制在o(1) 这个题没有给测试用例,导致没太明白题目意思,看了题解,用了两种方法示例如下: 法一(借鉴):利用两个指针,一个指针步 ...
- Python 生成随机数
import random x = int(input('Enter a number for x: ')) --随机数最小值y = int(input('Enter a number for y: ...
- [转载]hazard pointer
hazard pointer 转载自: http://hi.baidu.com/rodimus/item/f6539cc179894f2f47d5c0ef 这是用于解决多线程并发下内存的回收,一块内存 ...
- 欧拉回路&欧拉通路判断
欧拉回路:图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次, 称这条回路为欧拉回路.具有欧拉回路的图成为欧拉图. 判断欧拉通路是否存在的方法 ...
- Python+Selenium 自动化实现实例-数据驱动实例
#coding=utf-8 from selenium import webdriver driver = webdriver.Firefox() driver.implicitly_wait(10) ...
- 深度学习方法(八):自然语言处理中的Encoder-Decoder模型,基本Sequence to Sequence模型
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld.技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. Encoder-Decoder(编码- ...