제출 #305343

#제출 시각아이디문제언어결과실행 시간메모리
30534312tqian기지국 (IOI20_stations)C++14
100 / 100
1071 ms1120 KiB
#ifdef LOCAL #else #include "stations.h" #endif #include<bits/stdc++.h> using namespace std; typedef long long ll; #ifdef LOCAL #define dbg(...) debug(#__VA_ARGS__, __VA_ARGS__); #else #define dbg(...) 17; #endif template<typename T, typename S> ostream& operator << (ostream &os, const pair<T, S> &p) { return os << "(" << p.first << ", " << p.second << ")"; } template<typename C, typename T = decay<decltype(*begin(declval<C>()))>, typename enable_if<!is_same<C, string>::value>::type* = nullptr> ostream& operator << (ostream &os, const C &c) { bool f = true; os << "{"; for (const auto &x : c) { if (!f) os << ", "; f = false; os << x; } return os << "}"; } template<typename T> void debug(string s, T x) { cerr << s << " = " << x << "\n"; } template<typename T, typename... Args> void debug(string s, T x, Args... args) { cerr << s.substr(0, s.find(',')) << " = " << x << " | "; debug(s.substr(s.find(',') + 2), args...); } #ifdef LOCAL #else #endif int find_next_station(int s, int t, vector<int> c) { bool ok = true; sort(c.begin(), c.end()); int sz = c.size(); if (sz == 1) { return c[0]; } for (int i = 0; i < sz; i++) { if (t == c[i]) { return c[i]; } } if (s == 0) { for (int i = 0; i < sz; i++) { if (t < c[i]) { return c[i]; } } } if (c.back() < s) { // vertex is at odd depth if (t < c[1] || t > s) { return c[0]; } for (int i = sz - 1; i >= 1; i--) { if (t > c[i]) { return c[i]; } } } else { if (t > c[sz - 2] || t < s) { return c.back(); } for (int i = 0; i < sz - 1; i++) { if (t < c[i]) { return c[i]; } } } return -1; } vector<int> label(int n, int k, vector<int> u, vector<int> v) { vector<vector<int>> adj(n); for (int i = 0; i < n - 1; i++) { adj[u[i]].push_back(v[i]); adj[v[i]].push_back(u[i]); } vector<int> id(n); vector<int> depth(n); int cur = 0; function<void(int, int)> dfs = [&](int src, int par) { if (depth[src] % 2 == 0) { id[src] = cur++; } for (int nxt: adj[src]) { if (nxt == par) { continue; } depth[nxt] = depth[src] + 1; dfs(nxt, src); } if (depth[src] % 2 == 1) { id[src] = cur++; } }; dfs(0, -1); return id; } #ifdef LOCAL int main() { freopen("file.in", "r", stdin); // string line; cin >> line; int r; cin >> r; while (r--) { int n, k; cin >> n >> k; vector<int> u(n); vector<int> v(n); vector<vector<int>> adj(n); for (int i = 0; i < n - 1; i++ ){ cin >> u[i] >> v[i]; adj[u[i]].push_back(v[i]); adj[v[i]].push_back(u[i]); } vector<int> id = label(n, k, u, v); int q; cin >> q; while (q--) { int z, y, w; cin >> z >> y >> w; vector<int> labels; for (int nxt: adj[z]) { labels.push_back(id[nxt]); } int v1 = find_next_station(id[z], id[y], labels); int v2 = id[w]; assert(v1 == v2); } } return 0; } #else #endif

컴파일 시 표준 에러 (stderr) 메시지

stations.cpp: In function 'int find_next_station(int, int, std::vector<int>)':
stations.cpp:26:10: warning: unused variable 'ok' [-Wunused-variable]
   26 |     bool ok = true;
      |          ^~
#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...