Submission #1233474

#TimeUsernameProblemLanguageResultExecution timeMemory
1233474maya_sSpeedrun (RMI21_speedrun)C++20
19 / 100
30 ms544 KiB
#include "speedrun.h"
#include<bits/stdc++.h>
using namespace std;
typedef int ll;

void dfs_set_hints(ll n, ll p, vector<vector<ll>> &g){
    for(ll i = 0; i < 10; i++) if(g[n][0] & (1 << i)) setHint(n, i+1, 1);
    if(g[n].size() == 2) for(ll i = 0; i < 10; i++) if(g[n][1] & (1 << i)) setHint(n, i+11, 1);
    for(ll k: g[n]) if(k != p) dfs_set_hints(k, n, g);
}

void assignHints(int subtask, int n, int A[], int B[]) { 
    setHintLen(20);
    vector<vector<ll>> g(n+1);
    for(ll i = 1; i < n; i++) g[A[i]].push_back(B[i]), g[B[i]].push_back(A[i]);
    dfs_set_hints(1, 0, g);
}

void dfs_speedrun(ll n, ll p, ll l){
    ll a = 0, b = 0;
    for(ll i = 1; i <= 10; i++) if(getHint(i)) a += (1 << (i-1));
    for(ll i = 11; i <= 20; i++) if(getHint(i)) b += (1 << (i-11));
    if(a != p) {goTo(a); dfs_speedrun(a, n, l);}
    if(b && b != p) {goTo(b); dfs_speedrun(b, n, l);}
    if(p) goTo(p);
}

void speedrun(int subtask, int n, int start) { 
    dfs_speedrun(start, 0, n);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...