제출 #1246777

#제출 시각아이디문제언어결과실행 시간메모리
1246777qwusha기지국 (IOI20_stations)C++20
0 / 100
306 ms656 KiB
#include "stations.h" #include <iostream> #include <bits/stdc++.h> #define fi first #define se second using namespace std; int inf = 1e9 + 7; vector<vector<int>> g; vector<int> tin, tout; int curt = 0; vector<int> de; void dfs(int v, int p = -1, int d = 0) { de[v] = d; tin[v] = curt; curt++; for (auto u : g[v]) { if (u != p) { dfs(u, v, d + 1); } } tout[v] = curt; curt++; } vector<int> label(int n, int k, vector<int> v, vector<int> u) { curt = 0; vector<int> res(n); g.assign(n, {}); tin.assign(n, -1); de.assign(n, 0); tout.assign(n, -1); for (int i = 0; i < n - 1; i++) { g[v[i]].push_back(u[i]); g[u[i]].push_back(v[i]); } dfs(0); for (int i = 0; i < n; i++) { if (de[i] % 2 == 0) { res[i] = tin[i]; } else { res[i] = tout[i]; } } set<int> st; for (auto el: res){ st.insert(el); } map<int, int> mp; int ind = 0; for (auto el : st) { mp[el] = ind; ind++; } for (int i = 0; i < n; i++) { res[i] = mp[res[i]]; } return res; } int find_next_station(int s, int t, vector<int> c) { int p = -1; bool is_tin = 1; for (auto el : c) { if (el < s) { is_tin = 0; } } if (is_tin) { p = -1; for (auto el : c) { p = max(p, el); } if (t >= p || t <= s) { return p; } sort(c.rbegin(), c.rend()); int ind = 1; while (ind < c.size() - 1 && c[ind + 1] >= t) { ind++; } return c[ind]; } else { p = inf; for (auto el : c) { p = min(p, el); } if (t <= p || t >= s) { return p; } sort(c.begin(), c.end()); int ind = 1; while (ind < c.size() - 1 && c[ind + 1] <= t) { ind++; } return c[ind]; } }
#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...