C. Table Compression

time limit per test4 seconds

memory limit per test256 megabytes

inputstandard input

outputstandard output

Little Petya is now fond of data compression algorithms. He has already studied gz, bz, zip algorithms and many others. Inspired by the new knowledge, Petya is now developing the new compression algorithm which he wants to name dis.

Petya decided to compress tables. He is given a table a consisting of n rows and m columns that is filled with positive integers. He wants to build the table a’ consisting of positive integers such that the relative order of the elements in each row and each column remains the same. That is, if in some row i of the initial table ai, j < ai, k, then in the resulting table a’i, j < a’i, k, and if ai, j = ai, k then a’i, j = a’i, k. Similarly, if in some column j of the initial table ai, j < ap, j then in compressed table a’i, j < a’p, j and if ai, j = ap, j then a’i, j = a’p, j.

Because large values require more space to store them, the maximum value in a’ should be as small as possible.

Petya is good in theory, however, he needs your help to implement the algorithm.

Input

The first line of the input contains two integers n and m (, the number of rows and the number of columns of the table respectively.

Each of the following n rows contain m integers ai, j (1 ≤ ai, j ≤ 109) that are the values in the table.

Output

Output the compressed table in form of n lines each containing m integers.

If there exist several answers such that the maximum number in the compressed table is minimum possible, you are allowed to output any of them.

Examples

input

2 2

1 2

3 4

output

1 2

2 3

input

4 3

20 10 30

50 40 30

50 60 70

90 80 70

output

2 1 3

5 4 3

5 6 7

9 8 7

把一个二维数组离散化

先把数组里的数全部排序。用并查集把同一行或者同一列的相同元素并成一个集合,这个集合里的每个数的离散化后的序号一定是相同的,因为他们一样大并且在同一行或者同一列。每个元素肯定是其所在行和所在列的最大值加1,那么选取这些元素的中最大的作为根的值,其余的元素的值都和根的值相等,具体见代码

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
#include <stdio.h>
#include <string> using namespace std;
#define MAX 1000000
struct Node
{
int x;int y;
int value;
}b[MAX+5];
int n,m;
int cmp(Node a,Node b)
{
return a.value<b.value;
}
int father[MAX+5];
int r[MAX+5];
int l[MAX+5];
int mr[MAX+5];
int ml[MAX+5];
int ans[MAX+5];
int get(int x)
{
if(x!=father[x])
father[x]=get(father[x]);
return father[x];
}
void join(int x,int y)
{
int fx=get(x);
int fy=get(y);
if(fx!=fy)
father[fx]=fy;
}
int main()
{
scanf("%d%d",&n,&m);
int cnt=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%d",&b[(i-1)*m+j].value);
b[cnt].x=i;b[cnt++].y=j;
}
}
sort(b+1,b+n*m+1,cmp);
for(int i=1;i<=n*m;i++)
father[i]=i;
int i=1,k;
while(i<=n*m)
{
for( k=i;k<=n*m;k++)
{
if(b[k].value!=b[i].value)
break;
}
for(int j=i;j<k;j++)
{
if(!r[b[j].x])
r[b[j].x]=(b[j].x-1)*m+b[j].y;
else
{
join(r[b[j].x],(b[j].x-1)*m+b[j].y);
}
if(!l[b[j].y])
l[b[j].y]=(b[j].x-1)*m+b[j].y;
else
{
join(l[b[j].y],(b[j].x-1)*m+b[j].y);
}
}
for(int j=i;j<k;j++)
{
int s=get((b[j].x-1)*m+b[j].y);
ans[s]=max(ans[s],max(mr[b[j].x],ml[b[j].y])+1);
}
for(int j=i;j<k;j++)
{
int s=get((b[j].x-1)*m+b[j].y);
ans[(b[j].x-1)*m+b[j].y]=ans[s];
mr[b[j].x]=ans[s];ml[b[j].y]=ans[s];
r[b[j].x]=0;l[b[j].y]=0;
}
i=k;
}
for(int i=1;i<=n*m;i++)
{
if((i)%m==0)
printf("%d\n",ans[i]);
else
printf("%d ",ans[i]);
}
return 0;
}

Code Forces 650 C Table Compression(并查集)的更多相关文章

  1. Codeforces Round #345 (Div. 1) C. Table Compression (并查集)

    Little Petya is now fond of data compression algorithms. He has already studied gz, bz, zip algorith ...

  2. Codeforces Round #345 (Div. 2) E. Table Compression 并查集

    E. Table Compression 题目连接: http://www.codeforces.com/contest/651/problem/E Description Little Petya ...

  3. Codeforces Round #345 (Div. 2) E. Table Compression 并查集+智商题

    E. Table Compression time limit per test 4 seconds memory limit per test 256 megabytes input standar ...

  4. Codeforces 650C Table Compression (并查集)

    题意:M×N的矩阵 让你保持每行每列的大小对应关系不变,将矩阵重写,重写后的最大值最小. 思路:离散化思想+并查集,详见代码 好题! #include <iostream> #includ ...

  5. Code Forces 22B Bargaining Table

    B. Bargaining Table time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  6. Codeforces Round #345 (Div. 1) C. Table Compression dp+并查集

    题目链接: http://codeforces.com/problemset/problem/650/C C. Table Compression time limit per test4 secon ...

  7. codeforces Codeforces Round #345 (Div. 1) C. Table Compression 排序+并查集

    C. Table Compression Little Petya is now fond of data compression algorithms. He has already studied ...

  8. codeforces 651E E. Table Compression(贪心+并查集)

    题目链接: E. Table Compression time limit per test 4 seconds memory limit per test 256 megabytes input s ...

  9. Codeforces 651E Table Compression【并查集】

    题目链接: http://codeforces.com/problemset/problem/650/C 题意: 给定n*m的矩阵,要求用最小的数表示每个元素,其中各行各列的大小关系保持不变. 分析: ...

随机推荐

  1. SMBUS讀取數據的方法

    第一步     将HST_D0寄存器清零 第二部     确定HST_STS (SMB_BASE 00h)寄存器裡面的所有狀態位是清除的(写清零) 第三步     往XMIT_SLVA(SMB_BAS ...

  2. 解决Cocos2d-x3.0、3.1 &quot;_opendir$INODE64&quot;symbol(s) not found错误

    升级系统和XCode后.在IOS8上编译之前的项目会报例如以下错误: Undefined symbols for architecture x86_64: "_opendir$INODE64 ...

  3. 每日英语:Vender Assault Shines Ugly Light on China's Urban Enforcers

    The sudden death of a street vendor in Hunan province on Wednesday provoked outrage chengguan, or ur ...

  4. vue-cli中实现全选、单选计算总价格(vue2.0)

    <template> <div> <table> <tr> <td><input type="checkbox" ...

  5. 初识STM32固件库

    因为基于 Cortex 系列芯片采用的内核都是相同的,区别主要为核外的片上外设的差异,这些差异却导致软件在同内核,不同外设的芯片上移植困难.为了解决不同的芯片厂商生产的 Cortex 微控制器软件 的 ...

  6. xcode6 dyld_sim is not owned by root

    如果运行复制过来的xcode可能会这个提示,xcode6 dyld_sim is not owned by root解决方法打开终端 输入sudo xcode-select -switch /Appl ...

  7. 在linux跑xenomai vkworks skin的测试

    1 代码 ############################################################## /* * Copyright (C) 2001,2002,200 ...

  8. MySQL线程池总结

    线程池是Mysql5.6的一个核心功能,对于服务器应用而言,无论是web应用服务还是DB服务,高并发请求始终是一个绕不开的话题.当有大量请求并发访问时,一定伴随着资源的不断创建和释放,导致资源利用率低 ...

  9. 三种CSS方法实现loadingh点点点的效果

    我们在提交数据的时候,在开始提交数据与数据提交成功之间会有一段时间间隔,为了有更好的用户体验,我们可以在这个时间段添加一个那处点点点的动画,如下图所示: 汇总了一下实现这种效果主要有三种方法: 第一种 ...

  10. hive组件和执行过程

    转自http://blog.csdn.net/lifuxiangcaohui/article/details/40262021 对Hive的基本组成进行了总结: 1.组件: 元存储(Metastore ...