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;
const int N = 1005;
int timer = 0;
vector<int> edge[N];
int parent[N] , tin[N] , Euler[N];
void dfs(int u)
{
	tin[u] = ++timer;
	Euler[timer] = u;
	for (int v : edge[u])
	{
		if (v == parent[u]) continue;
		parent[v] = u;
		dfs(v);
	}
}
void assignHints (int subtask , int n , int eu[] , int ev[])
{
	for (int i = 1 ; i < n ; ++i)
	{
		edge[eu[i]].push_back(ev[i]);
		edge[ev[i]].push_back(eu[i]);
	}
	dfs(1);
	setHintLen(20);
	for (int u = 1 ; u <= n ; ++u)
	{
		int v;
		if (u != 1)
		{
			v = parent[u];
			for (int j = 0 ; j < 10 ; ++j) setHint(u , j + 1 , v >> j & 1);
		}
		if (tin[u] == n) v = 1;
		else v = Euler[tin[u] + 1];
		for (int j = 0 ; j < 10 ; ++j) setHint(u , j + 11 , v >> j & 1);
	}
}
pair<int , int> Hint[N];
bool visited[N];
void get_val(int cur)
{
    for (int j = 0 ; j < 20 ; ++j) cerr << getHint(j + 1) << " ";
    cerr << "\n";
	for (int j = 0 ; j < 10 ; ++j) if (getHint(j + 1)) Hint[cur].first |= 1 << j;
	for (int j = 10 ; j < 20 ; ++j) if (getHint(j + 1)) Hint[cur].second |= 1 << (j - 10);
}
void speedrun(int subtask , int n , int cur)
{
	int l = getLength();
	if (!visited[cur])
    {
        get_val(cur);
        visited[cur] = true;
    }
	int cnt = 1;
	while(cnt < n)
	{
	    if (!visited[cur])
        {
            get_val(cur);
            visited[cur] = true;
        }
		// cerr << current_node << " " << cur << " " << Hint[cur].first << " " << Hint[cur].second << "\n";
		if (tin[cur] == n)
		{
			while(cur != 1)
			{
				if (!visited[cur])
                {
                    get_val(cur);
                    visited[cur] = true;
                }
                // cerr << current_node << " " << cur << " " << Hint[cur].first << " " << Hint[cur].second << "\n";
				goTo(Hint[cur].first);
				cur = Hint[cur].first;
			}
		}
		else
		{
			int tmp = Hint[cur].second;
			while (!goTo(tmp))
			{
			    if (!visited[cur])
                {
                    get_val(cur);
                    visited[cur] = true;
                }
                // cerr << current_node << " " << cur << " " << Hint[cur].first << " " << Hint[cur].second << "\n";
				goTo(Hint[cur].first);
				cur = Hint[cur].first;
			}
			cur = tmp;
		}
		++cnt;
	}
}
Compilation message (stderr)
speedrun.cpp: In function 'void speedrun(int, int, int)':
speedrun.cpp:65:6: warning: unused variable 'l' [-Wunused-variable]
   65 |  int l = getLength();
      |      ^| # | 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... |