传送门
首先先从小到大排序,如果没有重复的元素,直接一个一个往上填即可,每一个数就等于当前行和列的最大值 + 1
如果某一行或列上有重复的元素,就用并查集把他们连起来,很(不)显然,处于同一行或列的相同元素始终应该保持一样的,然后再一个一个往上填
#include <bits/stdc++.h>#define N 1000007#define fi first#define se secondusing namespace std;pair <int, pair<int, int> > A[N];map <int, int> X, Y;int n, m;int Hx[N], Hy[N], ans[N], f[N];inline int find(int x)inline void uni(int x, int y)int main()sort(A, A + n * m);for(i = 0; i < n * m; i++)for(k = j + 1; k <= i; k++)for(k = j + 1; k <= i; k++)for(k = j + 1; k <= i; k++)j = i;}for(i = 0; i < n * m; i++)return 0;}
上一篇:[BZOJ2393] Cirno的完美算数教室(dfs+容斥原理)
下一篇:[luoguP3413] SAC#1 - 萌数(数位DP)
并查集









