Submission #308579

#TimeUsernameProblemLanguageResultExecution timeMemory
308579lacitoStations (IOI20_stations)C++14
31.04 / 100
1020 ms1024 KiB
#include "stations.h" #include <vector> using namespace std; const int M = 2000; vector<vector<int>> g; vector<int> intime, outtime; int time; void dfs(int v) { intime[v] = time++; for (int x : g[v]) if (intime[x] == -1) dfs(x); outtime[v] = time++; } vector<int> label(int n, int k, vector<int> u, vector<int> v) { g.assign(n, {}); intime.assign(n, -1); outtime.assign(n, -1); for (int i = 0; i < n - 1; i++) { g[u[i]].push_back(v[i]); g[v[i]].push_back(u[i]); } time = 0; dfs(0); vector<int> labels(n); for (int i = 0; i < n; i++) { labels[i] = M * intime[i] + outtime[i]; } return labels; } inline int in(int label) { return label / M; } inline int out(int label) { return label % M; } inline bool inside(int label_a, int label_b) { return in(label_a) <= in(label_b) && out(label_b) <= out(label_a); } int find_next_station(int s, int t, vector<int> c) { int parent = -1; for (int x : c) { if (inside(x, s)) parent = x; } for (int x : c) { if (inside(x, t) && x != parent) return x; } return parent; }
#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...