Codeforces Round #345 (Div. 2) E. Table Compression(并查集)
2017-09-28 15:40
330 查看
首先先从小到大排序,如果没有重复的元素,直接一个一个往上填即可,每一个数就等于当前行和列的最大值 + 1
如果某一行或列上有重复的元素,就用并查集把他们连起来,很(不)显然,处于同一行或列的相同元素始终应该保持一样的,然后再一个一个往上填
#include <bits/stdc++.h> #define N 1000007 #define fi first #define se second using namespace std; pair <int, pair<int, int> > A ; map <int, int> X, Y; int n, m; int Hx , Hy , ans , f ; inline int find(int x) { return x == f[x] ? x : f[x] = find(f[x]); } inline void uni(int x, int y) { x = find(x); y = find(y); if(x != y) f[x] = y; } int main() { int i, j = -1, k, x, y, p; scanf("%d %d", &n, &m); for(i = 0; i < n * m; i++) { f[i] = i; scanf("%d", &A[i].first); A[i].se.fi = i / m; A[i].se.se = i % m; } sort(A, A + n * m); for(i = 0; i < n * m; i++) { if(i != n * m - 1 && A[i].fi == A[i + 1].fi) continue; for(k = j + 1; k <= i; k++) { x = A[k].se.fi; y = A[k].se.se; p = A[k].se.fi * m + A[k].se.se; Hx[x] = p; Hy[y] = p; } for(k = j + 1; k <= i; k++) { x = A[k].se.fi; y = A[k].se.se; p = A[k].se.fi * m + A[k].se.se; uni(Hx[x], p); uni(Hy[y], p); } for(k = j + 1; k <= i; k++) { x = A[k].se.fi; y = A[k].se.se; p = A[k].se.fi * m + A[k].se.se; p = find(p); ans[p]= max(ans[p], max(X[x], Y[y]) + 1); } for(k = j + 1; k <= i; k++) { x = A[k].se.fi; y = A[k].se.se; p = A[k].se.fi * m + A[k].se.se; p = find(p); X[x] = max(X[x], ans[p]); Y[y] = max(Y[y], ans[p]); } j = i; } for(i = 0; i < n * m; i++) { printf("%d ", ans[find(i)]); if(i % m == m - 1) puts(""); } return 0; }
相关文章推荐
- Codeforces Round #345 (Div. 2) E. Table Compression(并查集)★ ★
- Codeforces #345 div1 C. Table Compression 并查集 构造
- Codeforces Round #345 (Div. 2) E. Table Compression 并查集
- Codeforces Round #345 (Div. 2) E. Table Compression
- Codeforces Round #345 (Div. 1) C. Table Compression dp+并查集
- 【Codeforces Round 345 (Div 1) C】【并查集缩环+拓扑最长路】Table Compression nm矩形权值缩小大小关系不变
- 如何让div中的table居中
- Div与table的区别
- html页面块元素的定位(DIV,Table,UL,LI等)
- [欧拉回路 并查集] Codeforces 547D #305 (Div. 1) D. Mike and Fish
- FF下,table元素放在div中会影响父层DIV的布局
- Codeforces Round #323 (Div. 2) C. GCD Table
- Codeforces Round #393 (Div. 2)-C. Pavel and barbecue(并查集)
- Codeforces Round #400 (Div. 1 + Div. 2, combined) D. The Door Problem 开关--并查集
- DIV+CSS基础教程:使用Table布局是不明智的
- css+div 布局(1)- css+div实现table布局
- js代码收集(1)_隐藏div、table间隔样式设置
- Codeforces Round #396 (Div. 2) D. Mahmoud and a Dictionary (并查集)
- Codeforces Round #396 (Div. 2) A B C D 水 trick dp 并查集
- div 内table 居中