Submission #536990

#TimeUsernameProblemLanguageResultExecution timeMemory
536990siewjhSpeedrun (RMI21_speedrun)C++17
29 / 100
55 ms716 KiB
#include "speedrun.h" #include <vector> using namespace std; void assignHints(int subtask, int N, int A[], int B[]) { if (subtask == 1){ setHintLen(N); for (int i = 1; i < N; i++){ setHint(A[i], B[i], 1); setHint(B[i], A[i], 1); } } else if (subtask == 2){ setHintLen(20); vector<int> occur(N + 1, 0); for (int i = 1; i < N; i++){ occur[A[i]]++; occur[B[i]]++; } int centre = 1; // when N is 2 for (int i = 1; i <= N; i++) if (occur[i] > 1){ centre = i; break; } for (int k = 0; k <= 19; k++) if (centre & (1 << k)) for (int i = 1; i <= N; i++) setHint(i, k + 1, 1); } } void dfs(int curr, int par, int N){ for (int i = 1; i <= N; i++){ if (!getHint(i)) continue; if (i == par) continue; goTo(i); dfs(i, curr, N); } if (par != -1) goTo(par); } void speedrun(int subtask, int N, int start) { if (subtask == 1) dfs(start, -1, N); else if (subtask == 2){ int centre = 0; for (int i = 0; i <= 19; i++) if (getHint(i + 1)) centre += (1 << i); if (start != centre) goTo(centre); for (int i = 1; i <= N; i++) if (i != centre){ goTo(i); goTo(centre); } } }
#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...