제출 #1134097

#제출 시각아이디문제언어결과실행 시간메모리
1134097adaawf기지국 (IOI20_stations)C++20
100 / 100
304 ms592 KiB
#include <iostream> #include <vector> #include <algorithm> #include "stations.h" using namespace std; int dd[1005], da[1005], z = 0, d[1005]; vector<int> g[1005]; void dfs(int x, int p) { dd[x] = ++z; for (int w : g[x]) { if (w == p) continue; d[w] = d[x] + 1; dfs(w, x); } da[x] = ++z; } vector<int> label(int n, int k, vector<int> u, vector<int> v) { z = 0; for (int i = 0; i < n; i++) g[i].clear(); for (int i = 0; i < n - 1; i++) { g[u[i]].push_back(v[i]); g[v[i]].push_back(u[i]); } dfs(0, -1); vector<pair<int, int>> vv; vector<int> res(n); for (int i = 0; i < n; i++) { if (d[i] & 1) vv.push_back({da[i], i}); else vv.push_back({dd[i], i}); } sort(vv.begin(), vv.end()); for (int i = 0; i < vv.size(); i++) { res[vv[i].second] = i; } return res; } int find_next_station(int s, int t, vector<int> v) { if (v.size() == 1) return v[0]; if (s == 0) { for (int w : v) { if (w >= t) return w; } } int flag = 0; for (int w : v) { if (s <= w) flag = 1; } if (flag == 1) { int x = s + 1; for (int i = 0; i < v.size() - 1; i++) { if (x <= t && t <= v[i]) { return v[i]; } x = v[i] + 1; } return v.back(); } int y = s - 1; for (int i = v.size() - 1; i >= 1; i--) { if (v[i] <= t && t <= y) { return v[i]; } y = v[i] - 1; } return v[0]; }
#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...