제출 #1292799

#제출 시각아이디문제언어결과실행 시간메모리
1292799Ludissey기지국 (IOI20_stations)C++20
0 / 100
406 ms576 KiB
#include <bits/stdc++.h> #include "stations.h" #define sz(a) (int)a.size() #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() using namespace std; vector<vector<int>> neigh; vector<int> in; vector<int> out; vector<int> depth; int tim=0; void dfs(int x,int p,int d){ in[x]=tim++; depth[x]=d; for (auto u : neigh[x]) { if(u==p) continue; dfs(u,x,d+1); } out[x]=tim++; } std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) { vector<int> labels(n); neigh.clear(); in.clear(); out.clear(); depth.clear(); in.resize(n); depth.resize(n); out.resize(n); neigh.resize(n); tim=0; for (int i = 0; i < n-1; i++) { neigh[u[i]].push_back(v[i]); neigh[v[i]].push_back(u[i]); } dfs(0,-1,0); for (int i = 0; i < n; i++) { if(depth[i]%2==0) labels[i]=in[i]/2; else labels[i]=out[i]/2; } return labels; } int find_next_station(int x, int t, std::vector<int> _c) { x*=2; t*=2; vector<int> c=_c; for (int i = 0; i < sz(c); i++) c[i]*=2; sort(all(c)); if(x>c.back()){ // root is E int ls=x; for (int i=sz(c)-1; i>=(x>0); i--) { int ei=ls-1; ls=c[i]; if(t>=c[i]&&t<=ei) return c[i]; } return c[0]; }else{ int ls=x; for (int i=0; i<sz(c)-(x>0); i++) { int si=ls+1; ls=c[i]; if(t>=si&&t<=c[i]) return c[i]; } return c.back(); } }
#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...