#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
speedrun.cpp: In function 'void speedrun(int, int, int)':
speedrun.cpp:65:6: warning: unused variable 'l' [-Wunused-variable]
65 | int l = getLength();
| ^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
228 ms |
848 KB |
Output is correct |
2 |
Correct |
217 ms |
752 KB |
Output is correct |
3 |
Correct |
274 ms |
736 KB |
Output is correct |
4 |
Correct |
211 ms |
712 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
262 ms |
784 KB |
Output is correct |
2 |
Correct |
247 ms |
724 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
250 ms |
796 KB |
Output is correct |
2 |
Correct |
247 ms |
716 KB |
Output is correct |
3 |
Correct |
269 ms |
788 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
255 ms |
676 KB |
Output is correct |
2 |
Correct |
236 ms |
660 KB |
Output is correct |
3 |
Correct |
250 ms |
1036 KB |
Output is correct |
4 |
Correct |
251 ms |
660 KB |
Output is correct |
5 |
Correct |
229 ms |
704 KB |
Output is correct |
6 |
Correct |
224 ms |
788 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
251 ms |
824 KB |
Output is correct |
2 |
Correct |
260 ms |
660 KB |
Output is correct |
3 |
Correct |
266 ms |
808 KB |
Output is correct |
4 |
Correct |
259 ms |
676 KB |
Output is correct |
5 |
Correct |
203 ms |
784 KB |
Output is correct |
6 |
Correct |
236 ms |
792 KB |
Output is correct |
7 |
Correct |
244 ms |
752 KB |
Output is correct |