Submission #1292762

#TimeUsernameProblemLanguageResultExecution timeMemory
1292762SofiatpcStations (IOI20_stations)C++20
36.23 / 100
392 ms572 KiB
#include "stations.h" #include <bits/stdc++.h> using namespace std; const int MAXN = 1e3+5, MOD = 10; vector<int> adj[MAXN]; int tin[MAXN], tout[MAXN], t; vector<int> labels; void dfs(int s, int p){ tin[s] = ++t; for(int viz : adj[s]) if(viz != p)dfs(viz,s); tout[s] = t; labels[s] = (tout[s]<<MOD)+tin[s]; } vector<int> label(int n, int k, vector<int> u, vector<int> v) { labels.resize(n); for (int i = 0; i < n-1; i++) { adj[u[i]].push_back(v[i]); adj[v[i]].push_back(u[i]); } t = -1; dfs(0,-1); for(int i = 0; i < n; i++)adj[i].clear(); return labels; } int find_next_station(int s, int t, vector<int> c) { int x = (1<<MOD)-1; x = (x<<MOD); t -= (t&x); int outmx = (c.back()&x)>>MOD; int cur = 0; while(cur < c.size()){ int viz = c[cur]; int in = viz-(viz&x), out = (viz&x)>>MOD; if(out == outmx)break; if(in <= t && t<= out)return viz; cur++; } for(int j = c.size()-1; j >= cur; j--){ int viz = c[j]; int in = viz-(viz&x), out = (viz&x)>>MOD; if(in <= t && t<= out)return viz; } return c[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...