Submission #895735

#TimeUsernameProblemLanguageResultExecution timeMemory
895735abcvuitunggioSaveit (IOI10_saveit)C++17
100 / 100
151 ms16700 KiB
#include "grader.h"
#include "encoder.h"
#include <bits/stdc++.h>
using namespace std;
static vector <int> ke[1000];
static int p[1000],vis[1000],d[1000];
static void dfs(int u){
    vis[u]=1;
    for (int v:ke[u])
        if (!vis[v]){
            p[v]=u;
            dfs(v);
        }
}
void encode(int nv, int nh, int ne, int *v1, int *v2){
    for (int i=0;i<ne;i++){
        ke[v1[i]].push_back(v2[i]);
        ke[v2[i]].push_back(v1[i]);
    }
    dfs(0);
    for (int i=1;i<nv;i++)
        for (int j=9;j>=0;j--)
            encode_bit((p[i]>>j)&1);
    queue <int> q;
    for (int i=0;i<nh;i++){
        fill(d,d+nv,-1);
        q.push(i);
        d[i]=0;
        while (!q.empty()){
            int u=q.front();
            q.pop();
            for (int v:ke[u])
                if (d[v]==-1){
                    d[v]=d[u]+1;
                    q.push(v);
                }
        }
        for (int j=0;j*10<nv;j++){
            int val=0;
            for (int k=min(j*10+9,nv-1);k>=j*10;k--)
                val=val*3+d[k]-d[p[k]]+1;
            for (int j=15;j>=0;j--)
                encode_bit((val>>j)&1);
        }
    }
}
#include "grader.h"
#include "decoder.h"
#include <bits/stdc++.h>
using namespace std;
static int p[1000],d[1000];
static vector <int> ke[1000];
static int get(int i){
    int val=0;
    while (i--)
        val=val*2+decode_bit();
    return val;
}
static void dfs(int u, int par, int hub, int dist){
    hops(hub,u,dist);
    for (int v:ke[u])
        if (v!=par)
            dfs(v,u,hub,dist+d[v]);
    if (u&&p[u]!=par)
        dfs(p[u],u,hub,dist-d[u]);
}
void decode(int nv, int nh){
    for (int i=1;i<nv;i++){
        p[i]=get(10);
        ke[p[i]].push_back(i);
    }
    for (int i=0;i<nh;i++){
        for (int j=0;j*10<nv;j++){
            int val=get(16);
            for (int k=j*10;k<min(j*10+10,nv);k++,val/=3)
                d[k]=val%3-1;
        }
        dfs(i,i,i,0);
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...