| # | Time | Username | Problem | Language | Result | Execution time | Memory |
|---|---|---|---|---|---|---|---|
| 1310341 | beluga_cat | Festival (IOI25_festival) | C++20 | 0 ms | 0 KiB |
#include "festival.h"
#include <vector>
#include <numeric>
using namespace std;
// Function to be implemented for the contest
vector<vector<int>> solve(int N, int M, vector<int> U, vector<int> V) {
// 1. Build adjacency list
vector<vector<int>> adj(N + 1);
for (int i = 0; i < M; ++i) {
adj[U[i]].push_back(V[i]);
adj[V[i]].push_back(U[i]);
}
// 2. Generate a sequence that visits all nodes/edges
vector<int> path;
vector<bool> visited(N + 1, false);
auto dfs = [&](auto self, int u) -> void {
visited[u] = true;
path.push_back(u);
for (int v : adj[u]) {
if (!visited[v]) {
self(self, v);
path.push_back(u); // Backtrack
}
}
};
dfs(dfs, 1);
// 3. Map this path to a grid
int S = path.size();
vector<vector<int>> grid(S, vector<int>(S));
for (int i = 0; i < S; ++i) {
for (int j = 0; j < S; ++j) {
// Simplest mapping: row i belongs to path[i]
grid[i][j] = path[i];
}
}
return grid;
}
