제출 #1199576

#제출 시각아이디문제언어결과실행 시간메모리
1199576badge881Speedrun (RMI21_speedrun)C++20
100 / 100
56 ms516 KiB
#include "speedrun.h" #include <bits/stdc++.h> using namespace std; const int maxn = 1005; int n, tin[maxn], et[maxn]; int timer; int par[maxn]; vector<int> g[maxn]; void dfs(int u, int prev) { tin[u] = ++timer; et[timer] = u; for (auto v : g[u]) { if (v == prev) continue; par[v] = u; dfs(v, u); } } void assignHints(int subtask, int N, int A[], int B[]) { n = N; for (int i = 1; i <= n; ++i) g[i].clear(); for (int i = 1; i < n; ++i) { int u = A[i], v = B[i]; g[u].push_back(v); g[v].push_back(u); } timer = par[1] = 0; dfs(1, 0); setHintLen(20); for (int i = 1; i <= n; ++i) { for (int j = 0; j < 10; ++j) setHint(i, j + 1, (par[i] >> j & 1)); int t = tin[i]; if (t < n) { t = et[t + 1]; for (int j = 0; j < 10; ++j) setHint(i, j + 1 + 10, (t >> j & 1)); } } } int getp() { int p = 0; for (int i = 0; i < 10; ++i) if (getHint(i + 1)) p |= (1 << i); return p; } int gets() { int p = 0; for (int i = 0; i < 10; ++i) if (getHint(i + 1 + 10)) p |= (1 << i); return p; } void speedrun(int subtask, int N, int start) { n = N; vector<bool> vis(n + 1); vis[start] = 1; while (true) { int p = getp(); if (!p) break; goTo(p); } while (true) { int nxt = gets(); if (!nxt) break; while (!goTo(nxt)) goTo(getp()); } }
#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...