Submission #1224954

#TimeUsernameProblemLanguageResultExecution timeMemory
1224954im2xtremeSplit the Attractions (IOI19_split)C++20
Compilation error
0 ms0 KiB
#include <iostream> #include <vector> #include <queue> #include <algorithm> #include "split.h" using namespace std; vector<int> find_split(int n, int a, int b, int c, vector<int>& p, vector<int>& q) { vector<vector<int>> adj(n); for (int i = 0; i < p.size(); ++i) { adj[p[i]].push_back(q[i]); adj[q[i]].push_back(p[i]); } vector<bool> visited(n, false); vector<vector<int>> components; // Step 1: Get connected components for (int i = 0; i < n; ++i) { if (!visited[i]) { vector<int> comp; queue<int> q; q.push(i); visited[i] = true; while (!q.empty()) { int u = q.front(); q.pop(); comp.push_back(u); for (int v : adj[u]) { if (!visited[v]) { visited[v] = true; q.push(v); } } } components.push_back(comp); } } // If only 1 component, then the graph is fully connected // Try to assign sets greedily vector<int> result(n, 0); vector<int> labels = {1, 2, 3}; // A=1, B=2, C=3 vector<int> sizes = {a, b, c}; vector<vector<int>> sets(3); // Greedily assign nodes int compIndex = 0; for (int l = 0; l < 3; ++l) { int remaining = sizes[l]; while (compIndex < components.size() && remaining >= components[compIndex].size()) { for (int node : components[compIndex]) { sets[l].push_back(node); } remaining -= components[compIndex].size(); compIndex++; } // If partially fill a component if (remaining > 0 && compIndex < components.size()) { for (int i = 0; i < components[compIndex].size() && remaining > 0; ++i) { sets[l].push_back(components[compIndex][i]); components[compIndex][i] = -1; // mark as used remaining--; } } } // Assign results int connected = 0; for (int i = 0; i < 3; ++i) { for (int node : sets[i]) { result[node] = i + 1; } // check if connected if (sets[i].size() > 1) connected++; } if (connected >= 2) return result; return vector<int>(n, 0); // no valid partition }

Compilation message (stderr)

/usr/bin/ld: /tmp/ccsvbpG5.o: in function `main':
grader.cpp:(.text.startup+0x277): undefined reference to `find_split(int, int, int, int, std::vector<int, std::allocator<int> >, std::vector<int, std::allocator<int> >)'
collect2: error: ld returned 1 exit status