Submission #413252

#TimeUsernameProblemLanguageResultExecution timeMemory
413252SuhaibSawalha1Stations (IOI20_stations)C++17
8 / 100
934 ms616 KiB
#include "stations.h" #include <bits/stdc++.h> using namespace std; vector<vector<int>> adj; vector<int> lab; int cnt; void dfs (int u, int p = -1) { for (int v : adj[u]) { if (v ^ p) { dfs(v, u); } } lab[u] = cnt++; } bool subtask2 () { for (int i = 0; i < (int)adj.size(); ++i) { vector<int> y{(i - 1) / 2, 2 * i + 1, 2 * i + 2}; if (!i) { y.erase(y.begin()); } sort(adj[i].begin(), adj[i].end()); while (y.size() > adj[i].size()) { y.pop_back(); } if (y != adj[i]) { return 0; } } return 1; } vector<int> label(int n, int k, vector<int> u, vector<int> v) { adj.assign(n, {}); lab.resize(n); cnt = 0; for (int i = 0; i < n - 1; ++i) { adj[u[i]].push_back(v[i]); adj[v[i]].push_back(u[i]); } if (!subtask2()) { for (int i = 0; i < n; ++i) { if (adj[i].size() == 1) { dfs(i); break; } } return lab; } iota(lab.begin(), lab.end(), 0); return lab; } int find_next_station(int s, int t, vector<int> c) { sort(c.begin(), c.end()); vector<int> y{(s - 1) / 2, 2 * s + 1, 2 * s + 2}; if (!s) { y.erase(y.begin()); } while (y.size() > c.size()) { y.pop_back(); } if (y != c) { return s - (t < s) + (t > s); } int e = t; while (e) { int p = (e - 1) / 2; if (p == s) { return e; } e = p; } return (s - 1) / 2; }
#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...