# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1245701 | Ice_man | Speedrun (RMI21_speedrun) | C++20 | 0 ms | 0 KiB |
#include<bits/stdc++.h>
using namespace std;
vector<long long>oiler;
vector<long long>graph[1'000'000];
vector<long long>tree[1'000'000];
bool vis[1'000'000];
long long par[1'000'000];
long long next1[1'000'000];
void dfs(long long x)
{
vis[x]=true;
if (oiler.size()!=0)
{
next1[oiler.back()]=x;
}
oiler.push_back(x);
for (auto next:graph[x])
{
if (vis[next]) dfs(next);
par[next]=x;
}
return;
}
void assignHints(int subtask, int n, int a[], int b[])
{
setHintLen(20);
vector<pair<long long, long long>>v;
for (long long i=1; i<=n; i++)
{
v.push_back({a[i], b[i]});
v.push_back({b[i], a[i]});
graph[a[i]].push_back(b[i]);
graph[b[i]].push_back(a[i]);
}
for (long long i=1; i<=n; i++) next[i]=0;
dfs(1);
for (long long i=1; i<=n; i++)
{
long long x=par[i];
for (long long j=1; j<=10; j++)
{
setHint(i, j, x%2);
x/=2;
}
long long x=next[i];
for (long long j=11; j<=20; j++)
{
setHint(i, j, x%2);
x/=2;
}
}
}
void speedrun(int subtask, int n, int start)
{
long long root=start;
while (root!=1)
{
long long p=0;
for (long long j=1; j<=10; j++)
{
p+=(1<<(j-1))*getHint(j);
}
goTo(p);
root=p;
}
while (true)
{
long long sled=0;
for (long long j=11; j<=20; j++)
{
sled+=(1<<(j-1))*getHint(j);
}
if (sled==0)
{
break;
}
bool ret=goTo(sled);
if (ret==0)
{
while (true)
{
pp=0;
for (long long j=1; j<=10; j++)
{
pp+=(1<<(j-1))*getHint(j);
}
goTo(pp);
if (goTo(sled))
{
break;
}
}
}
}
return;
}