Submission #1081548

#TimeUsernameProblemLanguageResultExecution timeMemory
1081548GrindMachineStations (IOI20_stations)C++17
0 / 100
605 ms940 KiB
#include <bits/stdc++.h> using namespace std; typedef long long int ll; typedef pair<int,int> pii; typedef pair<ll,ll> pll; #define pb push_back #define endl '\n' #define conts continue #define ff first #define ss second #define all(a) a.begin(),a.end() #define rall(a) a.rbegin(),a.rend() #define sz(a) (int)a.size() #define rep(i,n) for(int i = 0; i < n; ++i) #define rep1(i,n) for(int i = 1; i <= n; ++i) #define rev(i,s,e) for(int i = s; i >= e; --i) #define trav(i,a) for(auto &i : a) template<typename T> void amin(T &x, T y){ x = min(x,y); } template<typename T> void amax(T &x, T y){ x = max(x,y); } template<typename A,typename B> string to_string(pair<A,B> p); string to_string(const string &s){ return "'"+s+"'"; } string to_string(const char* s){ return to_string((string)s); } string to_string(bool b){ return b?"true":"false"; } template<typename A> string to_string(A v){ string res = "{"; trav(x,v){ res += to_string(x)+","; } if(res.back() == ',') res.pop_back(); res += "}"; return res; } template<typename A,typename B> string to_string(pair<A,B> p){ return "("+to_string(p.ff)+","+to_string(p.ss)+")"; } #define debug(x) cout << "[" << #x << "]: "; cout << to_string(x) << endl const int MOD = 1e9 + 7; const int N = 1e5 + 5; const int inf1 = 1e9 + 5; const ll inf2 = (ll)1e18 + 5; #include "stations.h" std::vector<int> label(int n, int k, std::vector<int> U, std::vector<int> V) { vector<vector<int>> adj(n); rep(i,n-1){ int u = U[i], v = V[i]; adj[u].pb(v), adj[v].pb(u); } vector<int> tin(n), subsiz(n), dummy(n); int timer = 0; auto nxt_pow_2 = [&](int x){ for(int i = 1; ; i <<= 1){ if(i >= x) return i; } return 0; }; auto dfs1 = [&](int u, int p, auto &&dfs1) -> void{ vector<int> sizes; subsiz[u] = 1; trav(v,adj[u]){ if(v == p) conts; adj[v].erase(find(all(adj[v]),u)); dfs1(v,u,dfs1); sizes.pb(subsiz[v]); subsiz[u] += subsiz[v]; } sort(all(sizes)); if(sz(sizes) > 1){ int val = subsiz[u]-sizes[0]+sizes[1]; int new_siz = nxt_pow_2(val); dummy[u] = new_siz-subsiz[u]; } }; auto cmp = [&](int u, int v){ return subsiz[u] > subsiz[v]; }; auto dfs2 = [&](int u, int p, auto &&dfs2) -> void{ sort(all(adj[u]),cmp); tin[u] = timer++; trav(v,adj[u]){ dfs2(v,u,dfs2); } timer += dummy[u]; }; dfs1(0,-1,dfs1); dfs2(0,-1,dfs2); return tin; // std::vector<int> labels(n); // for (int i = 0; i < n; i++) { // labels[i] = i; // } // return labels; } int find_next_station(int s, int t, std::vector<int> c) { auto nxt_pow_2 = [&](int x){ for(int i = 1; ; i <<= 1){ if(i >= x) return i; } return 0; }; if(sz(c) == 1){ return c[0]; } if(t < s){ return c[0]; } if(sz(c) == 2){ return c[1]; } rep(i,sz(c)-1){ if(c[i] <= t and t < c[i+1]){ return c[i]; } } int sum = c.back()-s; int subsiz = nxt_pow_2(sum); if(t < s+subsiz){ return c.back(); } else{ return c[0]; } assert(0); return -1; }
#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...