Submission #1253471

#TimeUsernameProblemLanguageResultExecution timeMemory
1253471fve5World Map (IOI25_worldmap)C++20
5 / 100
35 ms4676 KiB
#include "worldmap.h"
#include <bits/stdc++.h>
using namespace std;

vector<vector<int>> create_map(int N, int M, vector<int> A, vector<int> B) {
    vector<vector<int>> adj(N);
    for (int i = 0; i < M; i++) {
        adj[A[i] - 1].push_back(B[i] - 1);
        adj[B[i] - 1].push_back(A[i] - 1);
    }

    vector<bool> vis(N);
    vector<int> size(N);
    vector<vector<int>> grid(4 * N, vector<int>(4 * N));

    auto get_size = [&](auto &&get_size, int node) -> int {
        vis[node] = true;
        size[node] = 1;

        for (auto x: adj[node])
            if (!vis[x])
                size[node] += get_size(get_size, x);
        return size[node];
    };

    auto dfs = [&](auto &&dfs, int node, int l, int r, int d) -> void {
        for (int i = d; i < 4 * N; i++) {
            for (int j = l; j < r; j++) {
                grid[i][j] = node;
            }
        }
        vis[node] = true;

        vector<int> children;
        for (auto x: adj[node])
            if (!vis[x])
                children.push_back(x);

        int cur_l = 0;
        for (int i = 0; i < children.size(); i++) {
            dfs(dfs, children[i], cur_l, cur_l + 3 * size[children[i]], d + 1);
            cur_l += 3 * size[children[i]] + (i ? 1 : 3);
        }
    };

    get_size(get_size, 0);
    vis.assign(N, false);
    dfs(dfs, 0, 0, 4 * N, 0);

    for (auto &row: grid)
        for (auto &el: row)
            el++;

    return grid;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...