제출 #319758

#제출 시각아이디문제언어결과실행 시간메모리
319758spatarel기지국 (IOI20_stations)C++17
100 / 100
1186 ms1228 KiB
#include "stations.h" #include <algorithm> #include <stdio.h> #include <vector> const int MAX_N = 1000; bool visited[MAX_N]; std::vector<int> neighbours[MAX_N]; int counter; void visit(std::vector<int> &labels, int u) { labels[u] = counter; //printf("%d->%d\n", u, counter); counter++; } void dfs(std::vector<int> &labels, int u, bool parity = false) { //printf("dfs: %d %d\n", u, parity); visited[u] = true; if (parity) { visit(labels, u); } for (int v : neighbours[u]) { if (!visited[v]) { dfs(labels, v, !parity); } } if (!parity) { visit(labels, u); } } std::vector<int> label(int n, int k, std::vector<int> u, std::vector<int> v) { std::vector<int> labels(n); for (int i = 0; i < n - 1; i++) { neighbours[u[i]].push_back(v[i]); neighbours[v[i]].push_back(u[i]); } counter = 0; for (int i = 0; i < n; i++) { visited[i] = false; } dfs(labels, 0); for (int i = 0; i < n; i++) { neighbours[i].clear(); } return labels; } int find_next_station(int s, int t, std::vector<int> c) { if (c.size() == 1) { return c[0]; } int answer; std::sort(c.begin(), c.end()); /* for (int n : c) { printf("%d ", n); } printf("\n");//*/ if (s < c[0]) { int p = c.back(); int l = s; int r = c.end()[-2]; if (l <= t && t <= r) { int i = c.size() - 2; while (i >= 0 && t <= c[i]) { i--; } answer = c[i + 1]; } else { answer = p; } } else { int p = c[0]; int l = c[1]; int r = s; //printf("%d %d\n", l, r); if (l <= t && t <= r) { int i = 1; while (i < (int)c.size() && c[i] <= t) { i++; } answer = c[i - 1]; } else { answer = p; } } //printf("%d->%d (%d)\n", s, t, answer); return answer; }
#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...