Submission #1197658

#TimeUsernameProblemLanguageResultExecution timeMemory
1197658vjudge2Roller Coaster Railroad (IOI16_railroad)C++20
30 / 100
163 ms31304 KiB
#include "railroad.h" #include <bits/stdc++.h> using namespace std; using i32 = int32_t; #define int long long const int MAXN = 400005; int p[MAXN], sz[MAXN], diff[MAXN]; int find(int u) { return p[u] == u ? u : p[u] = find(p[u]); } bool merge(int u, int v) { u = find(u), v = find(v); if (u == v) return false; if (sz[u] < sz[v]) swap(u, v); p[v] = u, sz[u] += sz[v]; return true; } int plan_roller_coaster(std::vector<i32> s, std::vector<i32> t) { int n = (int) s.size(); vector<int> disc; for (int i = 0; i < n; i++) { disc.push_back(s[i]); disc.push_back(t[i]); } sort(disc.begin(), disc.end()); disc.erase(unique(disc.begin(), disc.end()), disc.end()); for (int i = 1; i <= (int) disc.size() + 1; i++) p[i] = i, sz[i] = 1; for (int i = 0; i < n; i++) { // cout << s[i] << " " << t[i] << '\n'; s[i] = lower_bound(disc.begin(), disc.end(), s[i]) - disc.begin() + 1; t[i] = lower_bound(disc.begin(), disc.end(), t[i]) - disc.begin() + 1; merge(s[i], t[i]); // cout << "merge: " << s[i] << " " << t[i] << '\n'; diff[s[i]]++, diff[t[i]]--; } int sz = disc.size(); merge(sz + 1, 1); disc.push_back(1e9 + 1); diff[sz + 1]++, diff[1]--; for (int i = 1; i <= sz; i++) diff[i + 1] += diff[i]; int ans = 0; for (int i = 1; i <= sz; i++) { if (diff[i] != 0) merge(i, i + 1); if (diff[i] > 0) ans += diff[i] * (disc[i + 1] - disc[i]); } vector<array<int, 3>> edge; for (int i = 1; i <= sz; i++) edge.push_back({i, i + 1, disc[i + 1] - disc[i]}); sort(edge.begin(), edge.end(), [] (auto x, auto y) { return x[2] < y[2]; }); for (auto& [u, v, w] : edge) if (merge(u, v)) ans += w; return ans; }

Compilation message (stderr)

railroad.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
railroad_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...