Submission #1294182

#TimeUsernameProblemLanguageResultExecution timeMemory
1294182Math4Life2020World Map (IOI25_worldmap)C++20
72 / 100
74 ms11068 KiB
#include "worldmap.h"
#include <bits/stdc++.h>
using namespace std;
using ll = int; using pii = pair<ll,ll>;

ll N,M,K;

vector<vector<ll>> adj;
vector<vector<ll>> fadj;
vector<ll> radj;
vector<ll> tpls;
vector<ll> sts; //subtree size

vector<vector<ll>> gmap(ll r0, ll W, ll H) { //current root in subtree, width, height
    vector<vector<ll>> ans = vector<vector<ll>>(W,vector<ll>(H,r0+1));
    ll D = adj[r0].size();
    for (ll d=0;d<D;d++) {
        ans[1][1+2*d]=adj[r0][d]+1;
    }
    ll XMIN = 3;
    for (ll r1: fadj[r0]) {
        vector<vector<ll>> m1 = gmap(r1,4*sts[r1]-1,H-1);
        for (ll x=0;x<(4*sts[r1]-1);x++) {
            for (ll y=0;y<(H-1);y++) {
                ans[x+XMIN][y+1]=m1[x][y];
            }
        }
        XMIN += 4*sts[r1];
    }
    return ans;
}

vector<vector<int>> create_map(int _N, int _M, vector<int> A, vector<int> B) {
    N=_N; M=_M;
    adj=vector<vector<ll>>(N);
    fadj=vector<vector<ll>>(N);
    radj=vector<ll>(N,-1);
    sts=vector<ll>(N,0);
    for (ll m=0;m<M;m++) {
        adj[A[m]-1].push_back(B[m]-1);
        adj[B[m]-1].push_back(A[m]-1);
    }
    queue<ll> q0;
    q0.push(0);
    tpls.clear();
    vector<bool> found(N,0);
    found[0]=1;
    while (!q0.empty()) {
        ll x0 = q0.front(); q0.pop();
        tpls.push_back(x0);
        for (ll y: adj[x0]) {
            if (!found[y]) {
                fadj[x0].push_back(y);
                radj[y]=x0;
                found[y]=1;
                q0.push(y);
            }
        }
    }
    for (ll t=(N-1);t>=0;t--) {
        ll xc = tpls[t];
        sts[xc]=1;
        for (ll y: fadj[xc]) {
            sts[xc]+=sts[y];
        }
    }
    K = 4*N;
    return gmap(0,K,K);
}
#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...