Submission #1202025

#TimeUsernameProblemLanguageResultExecution timeMemory
1202025NeltSphinx's Riddle (IOI24_sphinx)C++20
0 / 100
0 ms412 KiB
#include "sphinx.h" #include <bits/stdc++.h> #define ll long long #define endl "\n" using namespace std; vector<int> find_colours(int N, vector<int> X, vector<int> Y) { // 1) build adjacency list & spanning tree via BFS vector<vector<int>> adj(N); for (int j = 0; j < (int)X.size(); j++) { adj[X[j]].push_back(Y[j]); adj[Y[j]].push_back(X[j]); } vector<bool> seen(N, false); vector<pair<int, int>> tree_edges; queue<int> q; q.push(0); seen[0] = true; while (!q.empty()) { int u = q.front(); q.pop(); for (int v : adj[u]) { if (!seen[v]) { seen[v] = true; tree_edges.emplace_back(u, v); q.push(v); } } } // 2) DSU init vector<int> parent(N); iota(parent.begin(), parent.end(), 0); function<int(int)> findp = [&](int u) { return parent[u] == u ? u : parent[u] = findp(parent[u]); }; auto unite = [&](int u, int v) { u = findp(u); v = findp(v); if (u != v) parent[v] = u; }; // 3) for each tree edge, test same‑colour vector<int> E(N); for (auto [u, v] : tree_edges) { fill(E.begin(), E.end(), N); E[u] = E[v] = -1; int comps = perform_experiment(E); if (comps == 2) { // u and v share a colour unite(u, v); } // else they differ, leave them separate } // 4) assign each component an arbitrary label 0..K-1 vector<int> comp_id(N, -1), G(N); int next_label = 0; for (int i = 0; i < N; i++) { int r = findp(i); if (comp_id[r] < 0) comp_id[r] = next_label++; G[i] = comp_id[r]; } return G; }
#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...