제출 #1349555

#제출 시각아이디문제언어결과실행 시간메모리
1349555bangan세계 지도 (IOI25_worldmap)C++20
72 / 100
48 ms9452 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(v);
                be[v].pb(u);
            }
        }
    };
    dfs(dfs, 0);

    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();
            be[i].pop_back();
        }   
        ans.pb(ord);
        for (int i=0; i<N; i++) ord[idx[i]] = i;
    }

    for (int i=0; i<ans.size(); i++) for (int j=0; j<ans[i].size(); j++) ans[i][j]++;

    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...