Submission #696415

#TimeUsernameProblemLanguageResultExecution timeMemory
696415finn__Senior Postmen (BOI14_postmen)C++17
38 / 100
1081 ms16748 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC optimize("O3") #pragma GCC targe("avx2") struct Edge { unsigned u, v, i, j, k; // u <-> i, v <-> j; Edge(unsigned u_, unsigned v_, unsigned i_, unsigned j_, unsigned k_) { u = u_, v = v_, i = i_, j = j_, k = k_; } }; vector<vector<Edge>> g; vector<Edge> edges; vector<bool> visited; void delete_edge(Edge e) { swap(g[e.u][e.i], g[e.u].back()); swap(g[e.v][e.j], g[e.v].back()); g[e.u].erase(g[e.u].end() - 1); g[e.v].erase(g[e.v].end() - 1); if (e.i < g[e.u].size()) { g[e.u][e.i].i = e.i; edges[g[e.u][e.i].k] = g[e.u][e.i]; g[g[e.u][e.i].v][g[e.u][e.i].j].j = e.i; edges[g[g[e.u][e.i].v][g[e.u][e.i].j].k] = g[g[e.u][e.i].v][g[e.u][e.i].j]; } if (e.j < g[e.v].size()) { g[e.v][e.j].i = e.j; edges[g[e.v][e.j].k] = g[e.v][e.j]; g[g[e.v][e.j].v][g[e.v][e.j].j].j = e.j; edges[g[g[e.v][e.j].v][g[e.v][e.j].j].k] = g[g[e.v][e.j].v][g[e.v][e.j].j]; } } unsigned get_next_edge(unsigned u, unsigned p) { for (size_t i = 0; i < g[u].size(); i++) if (g[u][i].v != p) return i; } unsigned find_circuit(unsigned u, unsigned p = -1) { if (visited[u]) return u; visited[u] = 1; assert(!g[u].empty()); Edge e = g[u][get_next_edge(u, p)]; unsigned x = find_circuit(e.v, u); visited[u] = 0; if (x != UINT_MAX) { cout << u + 1 << ' ' << flush; delete_edge(edges[e.k]); if (u == x) x = UINT_MAX; } return x; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); size_t n, m; cin >> n >> m; g = vector<vector<Edge>>(n); visited = vector<bool>(n, 0); for (size_t i = 0; i < m; i++) { unsigned u, v; cin >> u >> v; u--, v--; g[u].emplace_back(u, v, g[u].size(), g[v].size(), i); g[v].emplace_back(v, u, g[v].size(), g[u].size() - 1, i); edges.push_back(g[u].back()); } for (unsigned u = 0; u < n; u++) { while (!g[u].empty()) { find_circuit(u); cout << '\n'; } } }

Compilation message (stderr)

postmen.cpp:5: warning: ignoring '#pragma GCC targe' [-Wunknown-pragmas]
    5 | #pragma GCC targe("avx2")
      | 
postmen.cpp: In function 'unsigned int get_next_edge(unsigned int, unsigned int)':
postmen.cpp:49:1: warning: control reaches end of non-void function [-Wreturn-type]
   49 | }
      | ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...