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[20];
//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=0,f=1;char ch=getchar();
    while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
    while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
    return x*f;
}
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("");
}
//**************************************************************************************

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[2010][2010];
int mp[2010][2010];
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(1);
    q2.push_back(1);
    scanf("%d",&k);
    for(int i=0;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=1,a[k].y1=1,a[k].x2=n,a[k].y2=m,a[k].c=c,a[k].t=0;

    sort(a,a+k+1,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=0;i<q1.size();i++)
        H1[q1[i]]=i+1;
    for(int i=0;i<q2.size();i++)
        H2[q2[i]]=i+1;

    for(int i=1;i<=q1.size()+1;i++)
        for(int j=1;j<=q2.size()+1;j++)
            fa[i][j]=j;

    for(int p=0;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]=1;
                fa[i][j]=j+1;
            }
        }
    }
    printf("%d\n",ans);
}
时间: 2024-10-29 19:11:06

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

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

A - 小彭玉的扫荡食堂计划 Time Limit: 20000/10000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others) Submit Status Problem Description 哗啦啦村的食堂很奇怪,就是如果这个饭卡所剩金额低于5元的话,这个饭卡就不能刷了. 也就是说,只要这个饭卡金额大于等于5元,就可以随便刷- 有一天,小彭玉看了看哗啦啦食堂的饭,“哇,好好吃!我要全部都买下来!” 但是小彭玉并没有那么

acdream 1685 多民族王国(图,DFS,并查集变形)

Problem Description 娜娜好不容易才回忆起自己是娜娜而不是什么Alice,也回忆起了自己要继续探索这个世界的目标,便偷偷溜出皇宫.娜娜发现这个王国有很多个民族组成,每个民族都有自己的方言,更要命的是这些方面差别还很远,这就导致这个王国的人民交流十分困难.娜娜仔细观察并记录了好久,发现总共有m种不同的语言. 突然娜娜发现前面有一群天才在讨论问题,但是奈何语言问题,导致这群人交流非常吃力.不过幸亏的是,这群天才都有一个特殊的能力,只要消耗一个单位的能量即可完全领悟一门新的语言(妈妈

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

闲话 stO猫锟学长,满脑子神仙DS 线段树分治思想 我们在做CDQ的时候,将询问和操作通通视为元素,在归并过程中统计左边的操作对右边的询问的贡献. 而在线段树分治中,询问被固定了.按时间轴确定好询问的序列以后,我们还需要所有的操作都会影响一个时间区间.而这个区间,毫无疑问正好对应着询问的一段区间. 于是,我们可以将每一个操作丢到若干询问里做区间修改了,而线段树可以高效地维护.我们开一个叶子节点下标为询问排列的线段树,作为分治过程的底层结构. 具体的实现,仍然要看题目. 例题1 BZOJ4025

UVA - 10004 Bicoloring(判断二分图——交叉染色法 / 带权并查集)

d.给定一个图,判断是不是二分图. s.可以交叉染色,就是二分图:否则,不是. 另外,此题中的图是强连通图,即任意两点可达,从而dfs方法从一个点出发就能遍历整个图了. 如果不能保证从一个点出发可以遍历整个图,那么编程要注意了,应该从每个点出发遍历一次. s2.带权并查集来判断,略复杂.先略过.先上个博客:http://blog.csdn.net/zsc09_leaf/article/details/6727622 c.邻接矩阵,bfs #include<iostream> #include&

【bzoj3007】拯救小云公主 二分+对偶图+并查集

题目描述 英雄又即将踏上拯救公主的道路…… 这次的拯救目标是——爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意识到自己还是等级1的时候,他明白这就是一个不可能完成的任务. 但他不死心,他在想,能不能避开boss去拯救公主呢,嘻嘻. Boss的洞穴可以看成一个矩形,英雄在左下角(1,1),公主在右上角(row,line).英雄为了避开boss,当然是离boss距离越远越好了,所以英雄决定找一条路径使到距离boss的最短距离

ACdream 1056 Bad Horse (种类并查集)

Bad Horse Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitStatus Problem Description As the leader of the Evil League of Evil, Bad Horse has a lot of problems to deal with. Most recently, there have been far too

hdu 5313 Bipartite Graph(dfs染色 或者 并查集)

Problem Description Soda has a bipartite graph with n vertices and m undirected edges. Now he wants to make the graph become a complete bipartite graph with most edges by adding some extra edges. Soda needs you to tell him the maximum number of edges

POJ2528 Mayor&#39;s posters(线段树染色问题+离散化)

题目大意:有t组数据,每组数据给你n张海报(1<=n<=10000),下面n组数据分别给出每张海报的左右范围(1 <= l <= r <= 10000000),下一张海报会覆盖前一张海报,求最后可见(包括完全和不完全可见)的海报有几张. 例如: 1 5 1 4 2 6 8 10 3 4 7 10 如上图所示,答案为4. 解题思路:其实这是一道区间染色问题,但是由于查找区间太大,显然直接建树会导致MLE,所以这里通过使用对区间的离散化来缩小查找范围.参考了一些大牛博客,简单说一

cdoj 1328 卿学姐与诡异村庄 Label:并查集 || 二分图染色

卿学姐与诡异村庄 Time Limit: 4500/1500MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Status 日复一日,年复一年,春去秋来. 卿学姐终于从天行廖那里毕业啦.出山的卿学姐首先来到了一个诡异的村庄. 在这个村庄中,只有两种人,一种是好人,一种是坏人. 好人只说真话,坏人只说假话. 村庄虚伪的平静由于卿学姐的到来,终于被打破了. 人们开始互相指控,每个人都会说另外一个人是否是好人.