Submission #434109

#TimeUsernameProblemLanguageResultExecution timeMemory
434109kwongwengStations (IOI20_stations)C++17
100 / 100
1186 ms940 KiB
#include <bits/stdc++.h> #include "stations.h" using namespace std; typedef vector<int> vi; #define pb push_back vi g[2000]; vi ans, sz, used; int cur; void dfs1(int u = 0, int p = -1, int d = 0){ for (int v : g[u]){ if (v == p) continue; dfs1(v, u, d+1); sz[u] += sz[v] + 1; } } void dfs2(int u = 0, int p = -1, int d = 0){ if (d % 2 == 0){ used[cur] = 1; ans[u] = cur; while (used[cur]) cur++; }else{ used[cur+sz[u]] = 1; ans[u] = cur+sz[u]; while (used[cur]) cur++; } for (int v : g[u]){ if (v == p) continue; dfs2(v, u, d+1); } } vi label(int n, int k, vi u, vi v) { cur = 0; vi answer; answer.resize(n, 0); ans.resize(n, 0); sz.resize(n, 0); used.resize(n, 0); for (int i = 0; i < n-1; i++){ g[u[i]].pb(v[i]); g[v[i]].pb(u[i]); } dfs1(); dfs2(); answer = ans; ans.clear(); sz.clear(); used.clear(); for (int i = 0; i < n; i++) g[i].clear(); return answer; } int find_next_station(int s, int t, vi c) { int C = c.size(); if (C==1) return c[0]; if (s < c[0]){ if (t < s || t >= c[C-1]) return c[C-1]; int ans = s; for (int i = 0; i < C-1; i++){ if (ans < t && t <= c[i]) return c[i]; ans = c[i]; } return c[C-1]; } if (t > s || t <= c[0]) return c[0]; int ans = s; for (int i = C-1; i > 0; i--){ if (ans > t && t >= c[i]) return c[i]; ans = c[i]; } return c[0]; }
#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...