Submission #538397

#TimeUsernameProblemLanguageResultExecution timeMemory
538397jamielimSpeedrun (RMI21_speedrun)C++14
0 / 100
174 ms676 KiB
#include "speedrun.h" #include <bits/stdc++.h> using namespace std; #define pb emplace_back int n; vector<int> adj[1005]; int par[1005]; vector<int> ord; int c[1005]; void dfs(int x){ ord.pb(x); for(int i:adj[x]){ if(par[x]==i)continue; par[i]=x; dfs(i); } } void assignHints(int subtask, int N, int A[], int B[]) { n=N; for(int i=0;i<n-1;i++){ adj[A[i]].pb(B[i]); adj[B[i]].pb(A[i]); } dfs(1); for(int i=0;i<n-1;i++){ c[ord[i]]=ord[i+1]; } c[ord[n-1]]=1; setHintLen(20); for(int i=1;i<=n;i++){ for(int j=1;j<=10;j++){ if(par[i]&(1<<(j-1)))setHint(i,j,1); else setHint(i,j,0); } for(int j=11;j<=20;j++){ if(c[i]&(1<<(j-11)))setHint(i,j,1); else setHint(i,j,0); } } } int getParent(){ int ans=0; for(int i=1;i<=10;i++){ ans+=getHint(i)*(1<<(i-1)); } return ans; } int getNext(){ int ans=0; for(int i=11;i<=20;i++){ ans+=getHint(i)*(1<<(i-11)); } return ans; } void speedrun(int subtask, int N, int start) { memset(par,0,sizeof(par)); memset(c,0,sizeof(c)); int cur=start; par[cur]=getParent(); c[cur]=getNext(); set<int> done; done.insert(cur); while((int)done.size()<n){ // not yet completed loop int nxt=c[cur]; while(!goTo(nxt)){ goTo(par[cur]); cur=par[cur]; par[cur]=getParent(); c[cur]=getNext(); done.insert(cur); } // reached the next thing in the order cur=nxt; par[cur]=getParent(); c[cur]=getNext(); done.insert(cur); } }
#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...