Submission #1293581

#TimeUsernameProblemLanguageResultExecution timeMemory
1293581tschav_World Map (IOI25_worldmap)C++20
72 / 100
60 ms8416 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;
    adj.resize(n+1,vector<int>{});

    for(int i = 0; i < m; ++i) {
        adj[A[i]].emplace_back(B[i]);
        adj[B[i]].emplace_back(A[i]);
    }

    if(m == 0){
        return vector<vector<int>>{vector<int>{1}};
    }

    vector<int> row;
    vector<bool> vis(n+1,false);

    int C = 0 ;

    auto dfs = [&](int ind, auto &&dfs) -> void {
        vis[ind]=true;
        ++C;
        for(auto &u : adj[ind]) {
            if(vis[u] or C==n) continue;

            row.emplace_back(ind);
            dfs(u,dfs);
        }
        if(C!=n)row.push_back(ind);
    };

    dfs(1, dfs);

    map<int,int>freq;
    int sz = 0;
    for(int i = 0; i < row.size();++i){
        if(freq[row[i]]){
            ++sz;
        }else{sz+=3;}
        ++freq[row[i]];
    }

     vector<vector<int>> ans(sz, vector<int>(sz, 1));


    vector<bool> F(n+1,false); int last= 0;
    for(int i = 0; i < row.size(); ++i) {
        int u = row[i];
        queue<int> Q;

        for(auto &v : adj[u]){
            Q.push(v);
        }
        if(F[u]){
            for(int j = 0; j < sz;++j)ans[j][last]=u;
            ++last;
        }else{
            int p1 = last;
            int p2 = last+1;
            int p3 = last+2;
            for(int j = 0; j < sz; ++j){

                if(j & 1 or Q.empty()){
                    ans[j][p1]=ans[j][p2]=ans[j][p3]=u;
                }else{
                    ans[j][p1]=ans[j][p3]=u;
                    ans[j][p2]=Q.front();
                    Q.pop();
                }

            }
            last+=3;
        }
        F[u]=true;

    }

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