#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf (int)2e18
#define nl '\n'
const int N = 1e5+1;
vector<array<int,3>> ep;
vector<int> ans[N];
int tk[5*N], vis[8*N];
int n;
void dfs(int v, vector<vector<pair<int,int>>>& g){
for(auto &[ch, ix] : g[v]){
if(vis[ix]) continue;
vis[ix] = 1;
dfs(ch, g);
ep.push_back({v, ch, ix});
}
}
void solve(int l, int r, vector<vector<pair<int,int>>>& g){
if(l == r){
for(int i = 1; i <= n; i++){
auto &[ch, ix] = g[i][0];
ans[i].push_back(tk[ix]);
}
return;
}
for(int i = 1; i <= 3*n; i++){
if(g[i].size() % 2){
g[0].push_back({i, 5*n + i});
g[i].push_back({0, 5*n + i});
}
}
ep.clear();
for(int i = 0; i <= 8*n; i++) vis[i] = 0;
for(int i = 0; i <= 3*n; i++){
dfs(i, g);
}
vector<vector<pair<int,int>>> lg(3*n + 5), rg(3*n + 5);
for(int i = 0; i < ep.size(); i++){
auto &[x, y, ix] = ep[i];
if(x == 0 or y == 0) continue;
if(i % 2){
lg[x].push_back({y, ix});
lg[y].push_back({x, ix});
}
else{
rg[x].push_back({y, ix});
rg[y].push_back({x, ix});
}
}
int m = (l+r)/2;
solve(l, m, lg);
solve(m+1, r, rg);
}
void solve(){
int s, m;
cin>>n>>s>>m;
vector<vector<pair<int,int>>> g(n+m+5);
for(int i = 1; i <= n; i++){
for(int j = 0; j < s; j++){
int t;
cin>>t;
int ix = (i-1)*s + j;
g[n+t].push_back({i, ix});
tk[ix] = t;
}
}
set<pair<int,int>> st;
for(int i = 1; i <= m; i++){
st.insert({g[n+i].size(), n+i});
}
while(st.size() >= 2){
auto [sx, x] = *st.begin();
st.erase(st.begin());
auto [sy, y] = *st.begin();
st.erase(st.begin());
if(sx + sy > s) break;
for(auto &[ch, ix] : g[x]) g[y].push_back({ch, ix});
g[x].clear();
st.insert({sx + sy, y});
}
for(int i = n+1, cnt = n; i <= n+m; i++){
if(g[i].empty()) continue;
cnt++;
swap(g[cnt], g[i]);
for(auto &[ch, ix] : g[cnt]){
g[ch].push_back({cnt, ix});
}
}
g.resize(3*n + 5);
solve(1, s, g);
for(int i = 1; i <= n; i++){
for(int x : ans[i]) cout<<x<<" ";
cout<<nl;
}
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(NULL);cout.tie(NULL);
int t = 1;
//cin>>t;
while(t--) solve();
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |