Submission #1291715

#TimeUsernameProblemLanguageResultExecution timeMemory
1291715gustavo_dConnecting Supertrees (IOI20_supertrees)C++20
100 / 100
102 ms26264 KiB
#include "supertrees.h" #include <bits/stdc++.h> using namespace std; #define sz(v) (int)(v).size() const int MAXN = 1000; vector<int> adj[MAXN]; vector<pair<int, int>> eds; bool vis[MAXN], vis2[MAXN]; vector<int> comp; void dfs(int v) { vis[v] = true; comp.push_back(v); for (int viz : adj[v]) { if (vis[viz]) continue; dfs(viz); } } int construct(vector<vector<int>> paths) { int n = sz(paths); for (int i=0; i<n; i++) { for (int j=0; j<n; j++) { if (i == j) continue; if (paths[i][j] == 0) continue; adj[i].push_back(j); } } for (int i=0; i<n; i++) { if (vis[i]) continue; comp.clear(); dfs(i); for (int u : comp) { for (int v : comp) { if (paths[u][v] == 0) { // cerr << u << ' ' << v << " together\n"; return 0; } } } vector<vector<int>> grps; for (int v : comp) { if (vis2[v]) continue; vector<int> grp {v}; for (int u : comp) { if (u == v) continue; if (paths[u][v] == 1) grp.push_back(u); } for (int a : grp) { vis2[a] = true; for (int b : grp) { if (paths[a][b] != 1) return 0; } } grps.push_back(grp); } // cerr << "componentes:\n"; // for (int g=0; g<sz(grps); g++) { // for (int i=0; i<sz(grps[g]); i++) { // cout << grps[g][i] << ' '; // } // cout << '\n'; // } if (sz(grps) == 1) { for (int i=1; i<sz(grps[0]); i++) { eds.emplace_back(grps[0][i-1], grps[0][i]); } continue; } if (sz(grps) == 2) return 0; for (int g=0; g<sz(grps); g++) { for (int v : grps[g]) { for (int g2=g+1; g2<sz(grps); g2++) { for (int u : grps[g2]) { if (paths[u][v] != 2) return 0; } } } for (int i=1; i<sz(grps[g]); i++) { eds.emplace_back(grps[g][i-1], grps[g][i]); } eds.emplace_back(grps[g][0], grps[(g+1) % sz(grps)][0]); } } vector<vector<int>> ans(n, vector<int> (n, 0)); // cerr << sz(eds) << '\n'; for (auto [u, v] : eds) { // cerr << u << ' ' << v << '\n'; ans[u][v] = ans[v][u] = 1; } build(ans); return 1; }
#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...