This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "grader.h"
#include "encoder.h"
#include <vector>
static std::vector<int> G[1000];
static int P[1000];
static int Q[1000],QN;
static int D[1000];
static void send(int x,int y){while(x--)encode_bit((y>>x)&1);}
void encode(int N, int H, int E, int A[], int B[])
{
	int i,j,k,t;
	for(i=0;i<N;i++)G[i].clear();
    for(i=0;i<E;i++)
	{
		G[A[i]].push_back(B[i]);
		G[B[i]].push_back(A[i]);
	}
	QN=0;
	for(j=0;j<N;j++)P[j]=-1;
    Q[QN++]=0;
    P[0]=0;
    for(j=0;j<N;j++)for(k=0;k<G[Q[j]].size();k++)if(P[G[Q[j]][k]]<0)
    {
        Q[QN++]=G[Q[j]][k];
        P[G[Q[j]][k]]=Q[j];
	}
	for(j=0;j<N;j++)send(10,P[j]);
    for(i=0;i<H;i++)
	{
		QN=0;
		for(j=0;j<N;j++)D[j]=-1;
        Q[QN++]=i;
        D[i]=0;
        for(j=0;j<N;j++)for(k=0;k<G[Q[j]].size();k++)if(D[G[Q[j]][k]]<0)
		{
			Q[QN++]=G[Q[j]][k];
			D[G[Q[j]][k]]=D[Q[j]]+1;
		}
		for(j=0;j<(N+4)/5;j++)
		{
			t=0;
			for(k=0;k<5;k++)
			{
				t*=3;
                if(j*5+k<N)t+=D[j*5+k]-D[P[j*5+k]]+1;
			}
			send(8,t);
		}
	}
}
#include "grader.h"
#include "decoder.h"
#include <vector>
static std::vector<int> G[1000];
static int P[1000];
static int A[1000][1000];
static int Q[1000],QN;
static int D[1000];
static int receive(int x){int y;for(y=0;x--;y|=decode_bit())y<<=1;return y;}
void decode(int N,int H)
{
	int i,j,k,t;
	for(i=0;i<N;i++)for(j=0;j<N;j++)A[i][j]=0;
    for(i=0;i<N;i++)
	{
		P[i]=receive(10);
        G[i].push_back(P[i]);
        G[P[i]].push_back(i);
	}
    for(i=0;i<H;i++)
	{
		for(j=0;j<(N+4)/5;j++)
		{
			t=receive(8);
			for(k=4;k>=0;k--)
			{
				if(j*5+k<N)
				{
					A[P[j*5+k]][j*5+k]=t%3-1;
					A[j*5+k][P[j*5+k]]=1-t%3;
				}
                t/=3;
			}
		}
		QN=0;
		for(j=0;j<N;j++)D[j]=-1;
		Q[QN++]=i;
        D[i]=0;
        for(j=0;j<N;j++)for(k=0;k<G[Q[j]].size();k++)if(D[G[Q[j]][k]]<0)
		{
			Q[QN++]=G[Q[j]][k];
			D[G[Q[j]][k]]=D[Q[j]]+A[Q[j]][G[Q[j]][k]];
		}
		for(j=0;j<N;j++)hops(i,j,D[j]);
	}
}
Compilation message (stderr)
encoder.cpp: In function 'void encode(int, int, int, int*, int*)':
encoder.cpp:25:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(j=0;j<N;j++)for(k=0;k<G[Q[j]].size();k++)if(P[G[Q[j]][k]]<0)
                             ~^~~~~~~~~~~~~~~
encoder.cpp:37:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(j=0;j<N;j++)for(k=0;k<G[Q[j]].size();k++)if(D[G[Q[j]][k]]<0)
                                 ~^~~~~~~~~~~~~~~
decoder.cpp: In function 'void decode(int, int)':
decoder.cpp:42:34: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(j=0;j<N;j++)for(k=0;k<G[Q[j]].size();k++)if(D[G[Q[j]][k]]<0)
                                 ~^~~~~~~~~~~~~~~| # | 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... |