Submission #1300549

#TimeUsernameProblemLanguageResultExecution timeMemory
1300549loomBrought Down the Grading Server? (CEOI23_balance)C++20
10 / 100
2097 ms86220 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...