Submission #1287980

#TimeUsernameProblemLanguageResultExecution timeMemory
1287980crispxxStations (IOI20_stations)C++20
52.32 / 100
403 ms532 KiB
#include "stations.h" #include <bits/stdc++.h> using namespace std; // #define int long long #define all(x) x.begin(), x.end() #define pb push_back #define ar array #define nl '\n' std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) { vector<vector<int>> adj(n); for(int i = 0; i < n - 1; i++) { adj[u[i]].pb(v[i]); adj[v[i]].pb(u[i]); } vector<int> tin(n), tout(n); int timer = -1; auto dfs = [&](auto &&self, int v, int p) -> void { tin[v] = ++timer; for(auto to : adj[v]) { if(to == p) continue; self(self, to, v); } tout[v] = timer; }; dfs(dfs, 0, 0); vector<int> lbl(n); for(int i = 0; i < n; i++) { // assert(tin[i] >= 0 && tin[i] < 1000); // assert(tout[i] >= 0 && tout[i] < 1000); lbl[i] = tin[i] * 1000 + tout[i]; assert(lbl[i] >= 0 && lbl[i] <= k); // cout << i << ": " << tin[i] << ' ' << tout[i] << ' ' << lbl[i] << nl; // assert(lbl[i] >= 0 && lbl[i] < 1000000); } return lbl; } int find_next_station(int s, int t, std::vector<int> c) { auto check = [&](int u, int v) { int tinu = u / 1000; int toutu = u % 1000; int tinv = v / 1000; int toutv = v % 1000; return tinv >= tinu && toutv <= toutu; }; if(check(s, t)) { for(auto &u : c) { if(check(u, t) && !check(u, s)) return u; // assert(!check(u, t)); } } else { for(auto &u : c) { if(check(u, s)) return u; // assert(check(s, u)); } } // return 1; assert(false); }
#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...