Submission #1186935

#TimeUsernameProblemLanguageResultExecution timeMemory
1186935hengliaoStations (IOI20_stations)C++20
0 / 100
2 ms584 KiB
#include "stations.h" #include<bits/stdc++.h> using namespace std; #define F first #define S second #define vll vector<ll> #define pll pair<ll, ll> #define pb push_back typedef int ll; namespace{ const ll dumb=1000; ll timer; } void dfs(ll cur, ll par, vll &re, vll &sz, vector<vll> &adj){ sz[cur]=1; re[cur]=timer; timer++; for(auto &chd:adj[cur]){ if(chd==par) continue; dfs(chd, cur, re, sz, adj); sz[cur]+=sz[chd]; } } vector<int> label(int n, int k, vector<int> u, vector<int> v) { vector<vll> adj(n); vll re(n); vll sz(n); for(ll i=0;i<n-1;i++){ adj[u[i]].pb(v[i]); adj[v[i]].pb(u[i]); } timer=0; dfs(0, -1, re, sz, adj); for(ll i=0;i<n;i++){ re[i]+=dumb*sz[i]; } return re; } int find_next_station(int s, int t, vector<int> c) { auto id=[&](ll tar){ return tar%dumb; }; auto sz=[&](ll tar){ return tar/dumb; }; ll p=-1; for(auto &it:c){ if(id(it)<id(s)){ p=it; break; } } assert(p!=-1); if(id(t)>=id(s) && id(t)<=id(s)+sz(s)-1){ for(auto &it:c){ if(it==p) continue; if(id(t)>=id(it) && id(t)<=id(it)+sz(it)-1){ return it; } } assert(false); } else{ return p; } }
#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...