Submission #434084

#TimeUsernameProblemLanguageResultExecution timeMemory
434084kwongwengStations (IOI20_stations)C++17
0 / 100
7 ms4624 KiB
#include "stations.h" #include <bits/stdc++.h> using namespace std; typedef vector<int> vi; #define pb push_back vi g[1000]; vi ans, sz, used; int cur = 0; 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) { vi answer; 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 pos = C-1; for (int i = C-2; i >= 0; i--){ if (t < c[i+1] && t >= c[i]){ pos = i; break; } } return c[pos]; } if (t > s || t <= c[0]) return c[0]; int pos = 0; for (int i = 1; i < C; i++){ if (t > c[i-1] && t <= c[i]){ pos = i; break; } } return c[pos]; }
#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...