Submission #1222597

#TimeUsernameProblemLanguageResultExecution timeMemory
1222597vladiliusSaveit (IOI10_saveit)C++20
50 / 100
49 ms5800 KiB
#include "grader.h" #include "encoder.h" #include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int, int>; #define pb push_back #define ff first #define ss second void encode(int n, int h, int m, int* a, int* b){ vector<int> g[n]; for (int i = 0; i < m; i++){ g[a[i]].pb(b[i]); g[b[i]].pb(a[i]); } vector<int> p(n, -1); p[0] = 0; queue<int> q; q.push(0); while (!q.empty()){ int v = q.front(); q.pop(); for (int i: g[v]){ if (p[i] == -1){ p[i] = v; q.push(i); } } } for (int i = 1; i < n; i++){ for (int j = 0; j < 10; j++){ encode_bit((p[i] >> j) & 1); } } for (int i = 1; i < h; i++){ vector<int> dist(n, 1e9); dist[i] = 0; q.push(i); while (!q.empty()){ int v = q.front(); q.pop(); for (int u: g[v]){ if (dist[u] == 1e9){ dist[u] = dist[v] + 1; q.push(u); } } } for (int j = 0; j < 10; j++){ encode_bit((dist[0] >> j) & 1); } for (int i = 1; i < n; i++){ int x = dist[i] - dist[p[i]]; x++; encode_bit((x >> 0) & 1); encode_bit((x >> 1) & 1); } } }
#include "grader.h" #include "encoder.h" #include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int, int>; #define pb push_back #define ff first #define ss second void decode(int n, int h){ vector<int> p(n), g[n]; for (int i = 1; i < n; i++){ for (int j = 0; j < 10; j++){ bool x = decode_bit(); if (x){ p[i] += (1 << j); } } } for (int i = 1; i < n; i++){ g[p[i]].pb(i); } vector<int> order, D(n); function<void(int)> dfs = [&](int v){ if (v){ order.pb(v); D[v] = D[p[v]] + 1; } for (int i: g[v]){ if (i != p[v]){ dfs(i); } } }; dfs(0); for (int i = 0; i < n; i++){ hops(0, i, D[i]); } for (int i = 1; i < h; i++){ vector<int> d(n); for (int j = 0; j < 10; j++){ bool x = decode_bit(); if (x){ d[0] += (1 << j); } } vector<int> V(n); for (int j = 1; j < n; j++){ for (int k = 0; k < 2; k++){ bool x = decode_bit(); if (x){ V[j] += (1 << k); } } } for (int j: order){ d[j] = d[p[j]] + V[j] - 1; } for (int j = 0; j < n; j++){ hops(i, j, d[j]); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...