File tree Expand file tree Collapse file tree 1 file changed +57
-0
lines changed Expand file tree Collapse file tree 1 file changed +57
-0
lines changed Original file line number Diff line number Diff line change 1+ #include < bits/stdc++.h>
2+ using namespace std ;
3+
4+ const int mxN=100 ;
5+ int n, m, mt[mxN];
6+ array<int , 2 > a[mxN][mxN];
7+ vector<array<int , 2 >> adj[mxN];
8+ bool vis[mxN];
9+
10+ bool dfs (int u1) {
11+ if (!vis[u1]) {
12+ vis[u1]=1 ;
13+ for (array<int , 2 > u2 : adj[u1]) {
14+ if (mt[u2[0 ]]<0 ||dfs (a[u2[0 ]][mt[u2[0 ]]][0 ])) {
15+ mt[u2[0 ]]=u2[1 ];
16+ return 1 ;
17+ }
18+ }
19+ }
20+ return 0 ;
21+ }
22+
23+ int main () {
24+ ios::sync_with_stdio (0 );
25+ cin.tie (0 );
26+
27+ cin >> n >> m;
28+ for (int i=0 ; i<n; ++i)
29+ for (int j=0 ; j<m; ++j)
30+ cin >> a[i][j][1 ], a[i][j][0 ]=(a[i][j][1 ]-1 )/m;
31+ for (int i=0 ; i<m; ++i) {
32+ for (int j=i; j<m; ++j)
33+ for (int k=0 ; k<n; ++k)
34+ adj[a[k][j][0 ]].push_back ({k, j});
35+ memset (mt, -1 , 4 *n);
36+ for (int j=0 ; j<n; ++j) {
37+ memset (vis, 0 , n);
38+ dfs (j);
39+ }
40+ for (int j=0 ; j<n; ++j) {
41+ swap (a[j][mt[j]], a[j][i]);
42+ adj[j].clear ();
43+ }
44+ }
45+ for (int k : {0 , 1 }) {
46+ for (int i=0 ; i<n; ++i) {
47+ for (int j=0 ; j<m; ++j)
48+ cout << a[i][j][1 ] << " " ;
49+ cout << " \n " ;
50+ }
51+ for (int i=0 ; i<m; ++i)
52+ for (int j=0 ; j<n-1 ; ++j)
53+ for (int k=0 ; k<n-1 ; ++k)
54+ if (a[k][i][0 ]>a[k+1 ][i][0 ])
55+ swap (a[k][i], a[k+1 ][i]);
56+ }
57+ }
You can’t perform that action at this time.
0 commit comments