Submission #1161603

#TimeUsernameProblemLanguageResultExecution timeMemory
1161603AndreyMake them Meet (EGOI24_makethemmeet)C++20
100 / 100
6 ms840 KiB
#include<bits/stdc++.h> using namespace std; vector<int> haha[1001]; vector<int> tree[1001]; vector<bool> bruh(1001,true); vector<int> dep[1001]; vector<int> par(1001); vector<pair<int,int>> troll(0); vector<vector<int>> ans(0); void dfs(int a, int t) { par[a] = t; if(t != -1) { troll.push_back({t,a}); } for(int v: tree[a]) { dfs(v,a); } if(t != -1) { troll.push_back({t,a}); } } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n,m,a,b; cin >> n >> m; for(int i = 0; i < m; i++) { cin >> a >> b; haha[a].push_back(b); haha[b].push_back(a); } if(m == n*(n-1)/2) { int ans[n][n]; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { ans[i][j] = j; } } for(int i = 0; i < n; i++) { for(int j = i+1; j < n; j++) { ans[(i+j)%n][i] = ans[(i+j)%n][j]; } } cout << 2*n << "\n"; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { cout << ans[i][j] << " "; } cout << "\n"; for(int j = 0; j < n; j++) { cout << ans[i][j] << " "; } cout << "\n"; } } else { int r; for(int i = 0; i < n; i++) { if(haha[i].size() < n-1) { r = i; break; } } vector<int> idk(1,r); int y = 0; dep[0].push_back(r); bruh[r] = false; while(true) { vector<int> idk2(0); for(int u: idk) { for(int v: haha[u]) { if(bruh[v]) { idk2.push_back(v); dep[y+1].push_back(v); bruh[v] = false; tree[u].push_back(v); } } } if(idk2.empty()) { break; } idk = idk2; y++; } dfs(r,-1); for(int i = n-(n%2); i >= 2; i-=2) { vector<int> wut(n); for(int v: dep[i]) { for(int j = 0; j < n; j++) { wut[j] = j; } wut[v] = par[par[v]]; wut[par[v]] = par[par[v]]; ans.push_back(wut); for(int j = 0; j < n; j++) { wut[j] = j; } wut[par[v]] = par[par[v]]; ans.push_back(wut); } } for(int i = 0; i < troll.size(); i++) { vector<int> wut(n); for(int j = 0; j < n; j++) { wut[j] = j; } wut[troll[i].first] = troll[i].second; ans.push_back(wut); } for(int i = ans.size()-troll.size()-1; i >= 0; i--) { ans.push_back(ans[i]); } for(int i = n-(n%2)+1; i >= 3; i-=2) { vector<int> wut(n); for(int v: dep[i]) { for(int j = 0; j < n; j++) { wut[j] = j; } wut[v] = par[par[v]]; wut[par[v]] = par[par[v]]; ans.push_back(wut); for(int j = 0; j < n; j++) { wut[j] = j; } wut[par[v]] = par[par[v]]; ans.push_back(wut); } } int x = dep[2][0]; for(int v: dep[1]) { if(v != x) { vector<int> wut(n); for(int j = 0; j < n; j++) { wut[j] = j; } wut[x] = par[x]; ans.push_back(wut); for(int j = 0; j < n; j++) { wut[j] = j; } wut[v] = r; ans.push_back(wut); for(int j = 0; j < n; j++) { wut[j] = j; } wut[par[x]] = r; wut[x] = r; ans.push_back(wut); } } vector<int> wut(n); for(int j = 0; j < n; j++) { wut[j] = j; } wut[par[x]] = r; cout << ans.size() << "\n"; for(vector<int> wut: ans) { for(int i = 0; i < n; i++) { cout << wut[i] << " "; } cout << "\n"; } } 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...