Submission #1189445

#TimeUsernameProblemLanguageResultExecution timeMemory
1189445hamzabcStations (IOI20_stations)C++20
100 / 100
301 ms588 KiB
#include "stations.h" #include <bits/stdc++.h> using namespace std; vector<vector<int>> graph; vector<int> sbsize; vector<int> labels; void dfs1(int a, int p){ for (auto go : graph[a]){ if (go == p) continue; dfs1(go, a); sbsize[a] += sbsize[go]; } } void dfs(int a, int p){ int j = labels[a]; for (auto go : graph[a]){ if (go == p) continue; if (labels[p] >= labels[a]){ j += sbsize[go]; labels[go] = j; }else{ j -= sbsize[go]; labels[go] = j; } dfs(go, a); } } std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) { labels.clear(); sbsize.clear(); graph.clear(); labels.resize(n); sbsize.resize(n, 1); graph.resize(n); for (int i = 0; i < n - 1; i++){ graph[u[i]].push_back(v[i]); graph[v[i]].push_back(u[i]); } dfs1(0, 0); dfs(0, 0); return labels; } int find_next_station(int s, int t, std::vector<int> c) { if (s < c[0]){ if (t < s || t >= c[c.size() - 1]){ return c[c.size() - 1]; } int tmp = c[c.size() - 1]; for (auto k : c){ if (t <= k){ tmp = min(tmp, k); } } return tmp; }else{ if (t > s || t <= c[0]){ return c[0]; } int tmp = c[0]; for (auto k : c){ if (t >= k){ tmp = max(tmp, k); } } return tmp; } 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...