제출 #821863

#제출 시각아이디문제언어결과실행 시간메모리
821863TB_기지국 (IOI20_stations)C++17
100 / 100
751 ms808 KiB
#include <bits/stdc++.h> using namespace std; // #undef _GLIBCXX_DEBUG // disable run-time bound checking, etc // #pragma GCC optimize("Ofast,inline") // Ofast = O3,fast-math,allow-store-data-races,no-protect-parens // #pragma GCC optimize ("unroll-loops") // #pragma GCC target("bmi,bmi2,lzcnt,popcnt") // bit manipulation // #pragma GCC target("movbe") // byte swap // #pragma GCC target("aes,pclmul,rdrnd") // encryption // #pragma GCC target("avx,avx2,f16c,fma,sse3,ssse3,sse4.1,sse4.2") // SIMD // #include <bits/extc++.h> // using namespace __gnu_pbds; // template<class T>using ordered_set = tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update>; // template<class T>using ordered_multiset = tree<T, null_type, less_equal<T>, rb_tree_tag,tree_order_statistics_node_update>; #define ll long long #define INF (ll)1e9+7 #define fo(i, n) for(int i=0;i<((ll)n);i++) #define deb(x) cout << #x << " = " << x << endl; #define deb2(x, y) cout << #x << " = " << x << ", " << #y << " = " << y << endl #define pb push_back #define mp make_pair #define F first #define S second #define LSOne(S) ((S) & (-S)) #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() inline int readint(){ int v = 0; char c; while((c = getchar()) != EOF && c != ' ' && c != '\n'){ v *= 10; v += c - '0'; } return v; } inline int readintsigned() { int v = 0; int sign = 1; char c = getchar(); if (c == '-') { sign = -1; } else { v += c - '0'; } while ((c = getchar()) != EOF && c != ' ' && c != '\n') { v *= 10; v += c - '0'; } return v * sign; } inline string readstring() { string s; char c; while ((c = getchar()) != EOF && c != '\n' && c != ' ') { s.push_back(c); } return s; } template <class result_t=std::chrono::milliseconds,class clock_t=std::chrono::steady_clock,class duration_t = std::chrono::milliseconds> auto since(std::chrono::time_point<clock_t, duration_t> const& start){return std::chrono::duration_cast<result_t>(clock_t::now() - start);} typedef pair<int, int> pii; typedef pair<ll, ll> pl; typedef vector<int> vi; typedef vector<ll> vl; typedef vector<pii> vpii; typedef vector<pl> vpl; typedef vector<vi> vvi; typedef vector<vl> vvl; typedef vector<vpii> vvpii; typedef vector<vpl> vvpl; int index2 = 0; vvl adj; vi labels2; void dfs(int u, int last = -1, bool odd = 0){ if(odd) labels2[u] = index2++; for(auto v : adj[u]){ if(v == last) continue; dfs(v, u, !odd); } if(!odd) labels2[u] = index2++; } vi label(int n, int k, vi u, vi v) { labels2.assign(n, 0); adj.assign(n, {}); fo(i, n-1){ adj[u[i]].pb(v[i]); adj[v[i]].pb(u[i]); } index2 = 0; dfs(0); return labels2; } int find_next_station(int s, int t, vi c) { bool isFirst = true; sort(all(c)); fo(i, c.size()) if(c[i] < s) isFirst = false; if(isFirst){ if(t<s || t>=c[c.size()-1]) return c[c.size()-1]; fo(i, c.size()) if(c[i] >= t) return c[i]; throw runtime_error("Should not get here!"); } c.pb(s); if(t>s) return c[0]; fo(i, c.size()-1) if(t >= c[i] && t < c[i+1]) return c[i]; return c[0]; } // static int max_label = 0; // static int r, n, k, q; // static std::vector<int> u, v, labels, answers; // static std::map<int, int> reverse_labels; // static std::vector<std::vector<int>> adjlist; // static int s, t, w; // static std::vector<int> c; // int main() { // assert(scanf("%d", &r) == 1); // for (int tc = 0; tc < r; tc++) { // assert(scanf("%d%d", &n, &k) == 2); // u.resize(n - 1); // v.resize(n - 1); // adjlist.clear(); // adjlist.resize(n); // for (int i = 0; i < n - 1; i++) { // assert(scanf("%d%d", &u[i], &v[i]) == 2); // adjlist[u[i]].push_back(v[i]); // adjlist[v[i]].push_back(u[i]); // } // labels = label(n, k, u, v); // if ((int)labels.size() != n) { // printf("Number of labels not equal to %d\n", n); // exit(0); // } // reverse_labels.clear(); // for (int i = 0; i < n; i++) { // if (labels[i] < 0 || labels[i] > k) { // printf("Label not in range 0 to %d\n", k); // exit(0); // } // if (reverse_labels.find(labels[i]) != reverse_labels.end()) { // printf("Labels not unique\n"); // exit(0); // } // reverse_labels[labels[i]] = i; // if (labels[i] > max_label) { // max_label = labels[i]; // } // } // assert(scanf("%d", &q) == 1); // for (int i = 0; i < q; i++) { // assert(scanf("%d%d%d", &s, &t, &w) == 3); // c.clear(); // for (int v : adjlist[s]) { // c.push_back(labels[v]); // } // std::sort(c.begin(), c.end()); // int answer = find_next_station(labels[s], labels[t], c); // if (!std::binary_search(c.begin(), c.end(), answer)) { // printf("Label %d returned by find_next_station not found in c\n", answer); // exit(0); // } // answers.push_back(reverse_labels[answer]); // } // } // printf("%d\n", max_label); // for (int index : answers) { // printf("%d\n", index); // } // exit(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...