Submission #1349551

#TimeUsernameProblemLanguageResultExecution timeMemory
1349551banganWorld Map (IOI25_worldmap)C++20
22 / 100
38 ms7404 KiB
#include "worldmap.h"
#include <bits/stdc++.h>
using namespace std;

#define pb push_back

std::vector<std::vector<int>> create_map(int N, int M, std::vector<int> A, std::vector<int> B) {
    vector<vector<int>> ans;

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

    vector<bool> seen(N);
    vector<int> ord, h(N), idx(N);
    vector<vector<int>> be(N);
    auto dfs = [&](auto self, int v) -> void {
        seen[v] = true;
        ord.pb(v);
        idx[v] = ord.size();
        ord.pb(v);
        ord.pb(v);
        for (int u : adj[v]) {
            if (!seen[u]) {
                h[u] = h[v]+1;
                self(self, u);
                ord.pb(v);
            }
            else if (h[u]<h[v]) {
                be[v].pb(u);
            }
        }
    };
    dfs(dfs, 0);

    for (int i=0; i < ord.size(); i++) ord[i]++;
    for (int i=0; i < ord.size(); i++) {
        for (int i=0; i<N; i++) if (!be[i].empty()) {
            ord[idx[i]] = be[i].back()+1;
            be[i].pop_back();
        }   
        ans.pb(ord);
        for (int i=0; i<N; i++) ord[idx[i]] = i+1;
    }

    return ans;
}
#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...