Submission #505075

#TimeUsernameProblemLanguageResultExecution timeMemory
505075duchungSpeedrun (RMI21_speedrun)C++17
100 / 100
274 ms1036 KiB
#include<bits/stdc++.h> #include "speedrun.h" using namespace std; const int N = 1005; int timer = 0; vector<int> edge[N]; int parent[N] , tin[N] , Euler[N]; void dfs(int u) { tin[u] = ++timer; Euler[timer] = u; for (int v : edge[u]) { if (v == parent[u]) continue; parent[v] = u; dfs(v); } } void assignHints (int subtask , int n , int eu[] , int ev[]) { for (int i = 1 ; i < n ; ++i) { edge[eu[i]].push_back(ev[i]); edge[ev[i]].push_back(eu[i]); } dfs(1); setHintLen(20); for (int u = 1 ; u <= n ; ++u) { int v; if (u != 1) { v = parent[u]; for (int j = 0 ; j < 10 ; ++j) setHint(u , j + 1 , v >> j & 1); } if (tin[u] == n) v = 1; else v = Euler[tin[u] + 1]; for (int j = 0 ; j < 10 ; ++j) setHint(u , j + 11 , v >> j & 1); } } pair<int , int> Hint[N]; bool visited[N]; void get_val(int cur) { for (int j = 0 ; j < 20 ; ++j) cerr << getHint(j + 1) << " "; cerr << "\n"; for (int j = 0 ; j < 10 ; ++j) if (getHint(j + 1)) Hint[cur].first |= 1 << j; for (int j = 10 ; j < 20 ; ++j) if (getHint(j + 1)) Hint[cur].second |= 1 << (j - 10); } void speedrun(int subtask , int n , int cur) { int l = getLength(); if (!visited[cur]) { get_val(cur); visited[cur] = true; } int cnt = 1; while(cnt < n) { if (!visited[cur]) { get_val(cur); visited[cur] = true; } // cerr << current_node << " " << cur << " " << Hint[cur].first << " " << Hint[cur].second << "\n"; if (tin[cur] == n) { while(cur != 1) { if (!visited[cur]) { get_val(cur); visited[cur] = true; } // cerr << current_node << " " << cur << " " << Hint[cur].first << " " << Hint[cur].second << "\n"; goTo(Hint[cur].first); cur = Hint[cur].first; } } else { int tmp = Hint[cur].second; while (!goTo(tmp)) { if (!visited[cur]) { get_val(cur); visited[cur] = true; } // cerr << current_node << " " << cur << " " << Hint[cur].first << " " << Hint[cur].second << "\n"; goTo(Hint[cur].first); cur = Hint[cur].first; } cur = tmp; } ++cnt; } }

Compilation message (stderr)

speedrun.cpp: In function 'void speedrun(int, int, int)':
speedrun.cpp:65:6: warning: unused variable 'l' [-Wunused-variable]
   65 |  int l = getLength();
      |      ^
#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...