제출 #1294002

#제출 시각아이디문제언어결과실행 시간메모리
1294002SonicML기지국 (IOI20_stations)C++20
100 / 100
395 ms556 KiB
#include "stations.h" #include <vector> using namespace std; int const NMAX = 1000; vector <int> g[1 + NMAX]; int depth[1 + NMAX]; int ind = 0; void DFS(int node, int parent, vector <int> &labels) { if(depth[node] % 2 == 0) { ind++; labels[node-1] = ind-1; } for(int i = 0;i < g[node].size();i++) { int to = g[node][i]; if(to != parent) { depth[to] = depth[node]+1; DFS(to, node, labels); } } if(depth[node] % 2 == 1) { ind++; labels[node-1] = ind-1; } } vector<int> label(int n, int k, vector<int> u, vector<int> v) { vector<int> labels(n); ind = 0; for(int i = 1;i <= n;i++) { depth[i] = 0; g[i].clear(); } for(int i = 1;i <= n-1;i++) { int a = u[i-1]+1, b = v[i-1]+1; g[a].push_back(b); g[b].push_back(a); } DFS(1, 1, labels); /* for(int i = 1;i <= n;i++) { if(depth[i] % 2 == 0) { labels[i-1] = in[i]; }else { labels[i-1] = out[i]; } } */ //normalize(labels); return labels; } int solve1(int s, int t, vector <int> &c) { int oldLim = s; for(int i = 0;i < c.size()-1;i++) { if(oldLim < t && t <= c[i]) { return c[i]; } oldLim = c[i]; } return c[c.size()-1]; } int solve2(int s, int t, vector <int> &c) { int oldLim = s; for(int i = c.size()-1;i > 0;i--) { if(c[i] <= t && t < oldLim) { return c[i]; } oldLim = c[i]; } return c[0]; } int find_next_station(int s, int t, vector<int> c) { if(s == 0) { // root / s - in / c - out return solve1(s, t, c); }else { // if(s < c[0]) { // s - in / c - out return solve1(s, t, c); } else { // s - in / c - out return solve2(s, t, c); } } }
#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...