Submission #74242

#TimeUsernameProblemLanguageResultExecution timeMemory
74242imeimi2000Roller Coaster Railroad (IOI16_railroad)C++14
100 / 100
293 ms159844 KiB
#include "railroad.h" #include <algorithm> #include <functional> using namespace std; typedef long long llong; typedef pair<int, int> pii; vector<int> cp; vector<int> deg; int compress(int x) { return lower_bound(cp.begin(), cp.end(), x) - cp.begin(); } vector<int> par; int find(int x) { if (par[x] != -1) return par[x] = find(par[x]); return x; } int merge(int x, int y) { x = find(x); y = find(y); if (x == y) return 0; par[y] = x; return 1; } llong plan_roller_coaster(vector<int> s, vector<int> t) { for (int i : s) cp.push_back(i); for (int i : t) cp.push_back(i); cp.push_back(0); sort(cp.begin(), cp.end()); cp.erase(unique(cp.begin(), cp.end()), cp.end()); deg.resize(cp.size(), 0); par.resize(cp.size(), -1); for (int &i : s) i = compress(i); for (int &i : t) i = compress(i); for (int i : s) ++deg[i]; for (int i : t) --deg[i]; for (int i = 0; i < s.size(); ++i) merge(s[i], t[i]); llong ret = 0; for (int i = 1; i < cp.size(); ++i) { int ch = deg[i - 1] - (i == 1); if (ch != 0) merge(i - 1, i); deg[i - 1] -= ch; deg[i] += ch; if (ch > 0) ret += (llong)ch * (cp[i] - cp[i - 1]); } vector<pii> es; for (int i = 1; i < cp.size(); ++i) es.emplace_back(cp[i] - cp[i - 1], i); sort(es.begin(), es.end()); for (pii _i : es) { int c, i; tie(c, i) = _i; if (merge(i - 1, i)) ret += c; } return ret; }

Compilation message (stderr)

railroad.cpp: In function 'llong plan_roller_coaster(std::vector<int>, std::vector<int>)':
railroad.cpp:42:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < s.size(); ++i) merge(s[i], t[i]);
                     ~~^~~~~~~~~~
railroad.cpp:45:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 1; i < cp.size(); ++i) {
                     ~~^~~~~~~~~~~
railroad.cpp:54:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 1; i < cp.size(); ++i) es.emplace_back(cp[i] - cp[i - 1], i);
                     ~~^~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...