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<bits/stdc++.h>
#include "speedrun.h"
using namespace std;
int a,b,c,d,e,i,j,ii,jj,zx,xc,p[1009],pi,msh[1009];
vector <int> v[1009];
void dfs(int q, int w){
	pi++;p[pi]=q;msh[q]=w;
	for(vector <int>::iterator it=v[q].begin(); it!=v[q].end(); it++){
		if((*it)==w) continue;
		dfs((*it),q);
	}
}
void assignHints(int subtask, int NN, int AA[], int BB[]) {
	setHintLen(20);
	a=NN;
	for(i=1; i<a; i++){
		v[AA[i]].push_back(BB[i]);
		v[BB[i]].push_back(AA[i]);
	}
	dfs(1,0);
	for(i=1; i<=a; i++){
		if(i<a){
		c=p[i+1];d=1;
		while(c>0){
			if(c%2==1) setHint(p[i],d,1);
			c/=2;d++;
		}
		}
		c=msh[p[i]];d=11;
		while(c>0){
			if(c%2==1) setHint(p[i],d,1);
			c/=2;d++;
		}
	}
}
int MSH(int q){
	int qw=0,we=1;
	for(int h=11; h<=20; h++){
		if(getHint(h)) qw+=we;
		we*=2;
	}
	return qw;
}
int nxt(int q){
	int qw=0,we=1;
	for(int h=1; h<=10; h++){
		if(getHint(h)) qw+=we;
		we*=2;
	}
	return qw;
}
void dfs(int q){
	int w=nxt(q);
	if(w==0) return;
	while(goTo(w)==0){
		int qw=MSH(q);
		goTo(qw);
		q=qw;
	}
	dfs(w);
}
void speedrun(int subtask, int NN, int start) {
	a=NN;c=start;
	while(c!=1){
		zx=MSH(c);
		goTo(zx);
		c=zx;
	}
	dfs(1);
}
| # | 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... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |