#include "grader.h"
#include "encoder.h"
#include <bits/stdc++.h>
using namespace std;
#define pii pair<int, int>
#define mp make_pair
#define pb push_back
#define fi first
#define se second
void encode(int n, int h, int e, int *u, int *v){
	vector<int> par(n);
	vector<vector<int> > graph(n), dj(h, vector<int>(n, -1));
	for (int i=0; i<e; ++i)graph[u[i]].pb(v[i]), graph[v[i]].pb(u[i]);
	for (int i=0; i<h; ++i){
		queue<int> q;
		dj[i][i]=0;
		q.push(i);
		while (q.size()){
			int node=q.front();
			q.pop();
			for (auto num:graph[node])if (dj[i][num]==-1){
				dj[i][num]=dj[i][node]+1;
				q.push(num);
				if (!i)par[num]=node;
			}
		}
	}
	for (int i=1; i<n; ++i)for (int j=0; j<10; ++j)encode_bit(!!(par[i]>>j));
	for (int i=0; i<h; ++i){
		int sum=0;
		for (int j=1; j<n; ++j){
			sum=sum*3+dj[i][j]-dj[i][par[j]]+1;
			if (!(j%10)||j==n-1){
				for (int b=0; b<16; ++b)encode_bit(!!(sum>>b));
				sum=0;
			}
		}
	}
}
#include "grader.h"
#include "decoder.h"
#include <bits/stdc++.h>
using namespace std;
#define pii pair<int, int>
#define mp make_pair
#define pb push_back
#define fi first
#define se second
vector<vector<int> > graph, dist, diff;
void dfs(int node, int par, int t){
	if (par==-1)dist[t][node]=0;
	for (auto num:graph[node])if (num!=par)dist[t][num]=dist[t][node]+diff[node][num], dfs(num, node, t);
}
void decode(int n, int h){
  graph.clear();
  dist.clear();
  diff.clear();
	graph.resize(n);
	dist.resize(h, vector<int>(n));
	diff.resize(h, vector<int>(n, 0));
	vector<int> par(n, 0);
	for (int i=1; i<n; ++i){
		for (int j=0; j<10; ++j)par[i]+=decode_bit()*(1<<j);
		graph[i].pb(par[i]);
		graph[par[i]].pb(i);
	}
	for (int i=0; i<h; ++i){
		int sum=0;
		for (int j=1; j<n; ++j)if (!(j%10)||j==n-1){
			for (int b=0; b<16; ++b)sum+=decode_bit()*(1<<b);
			for (int p=j; p>(j-1)/10*10; --p)diff[par[p]][p]=sum%3-1, diff[p][par[p]]=1-sum%3, sum/=3;
		}
		dfs(i, -1, i);
		for (int j=0; j<n; ++j)hops(i, j, dist[i][j]);
	}
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |