#include <algorithm>
#include <iostream>
#include <iomanip>
#include <bitset>
#include <cmath>
#include <queue>
#include <map>
#include <set>
#include "speedrun.h"
// Akhmet Issa
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
#define ent "\n"
const int maxn = 1e6 + 100;
const ll INF = (ll)2e18;
const int inf = (ll)2e9;
const int maxl = 20;
const int MOD = 1e9 + 7;
vector<int> g[maxn];
vector<int> ord;
void calc(int v, int pr){
ord.push_back(v);
for(int to: g[v]){
if(to != pr){
for(int j = 0; j < 10; j++){
if(v & (1<<j)) setHint(to, j + 11, 1);
}
calc(to, v);
}
}
}
void assignHints(int subtask, int n, int A [], int B []){
for(int i = 1; i < n; i++){
g[A[i]].push_back(B[i]);
g[B[i]].push_back(A[i]);
}
setHintLen(20);
calc(1, 0);
for(int i = 0; i < n - 1; i++){
for(int j = 0; j < 10; j++){
if(ord[i+1] & (1<<j)) setHint(ord[i], j + 1, 1);
}
}
}
int get(int p){
int ans = 0;
for(int i = 0; i < 10; i++){
if(getHint(p + i)) ans |= (1<<i);
}
return ans;
}
void dfs(int v, int to){
if(!to) return;
if(goTo(to)){
int nxt = get(1);
dfs(to, nxt);
} else{
int pr = get(11);
dfs(pr, to);
}
}
void speedrun(int subtask, int n, int start){
while(start != 1){
start = get(11);
goTo(start);
}
dfs(1, get(1));
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
125 ms |
47664 KB |
Used too many wrong interactions |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
103 ms |
47616 KB |
Used too many wrong interactions |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
107 ms |
47668 KB |
Used too many wrong interactions |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
268 ms |
47612 KB |
Used too many wrong interactions |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
108 ms |
47632 KB |
Used too many wrong interactions |
2 |
Halted |
0 ms |
0 KB |
- |