#include "railroad.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 200200;
struct Edge {
int u, v, w;
bool operator < (const Edge& o) const {
return w < o.w;
}
};
vector<Edge> e;
bool vis[N];
int n, p[N];
ll qs[N];
vector<int> adj[N];
int fr(int i) {
return p[i] == i ? i : p[i] = fr(p[i]);
}
void dfs(int v, int rt) {
vis[v] = 1;
p[fr(v)] = fr(rt);
for (auto& x : adj[v]) if (!vis[x]) dfs(x, rt);
}
ll plan_roller_coaster(vector<int> s, vector<int> t) {
s.push_back(1e9), t.push_back(1);
n = (int)s.size();
vector<int> compress;
for (int i = 0;i < n;i++) {
p[i] = i;
compress.push_back(s[i]);
compress.push_back(t[i]);
}
sort(compress.begin(), compress.end());
compress.resize(unique(compress.begin(), compress.end()) - compress.begin());
int sz = compress.size();
for (int i = 0;i < n;i++) {
s[i] = lower_bound(compress.begin(), compress.end(), s[i]) - compress.begin();
t[i] = lower_bound(compress.begin(), compress.end(), t[i]) - compress.begin();
qs[s[i]]++;
qs[t[i]]--;
adj[s[i]].push_back(t[i]);
}
ll ans = 0;
for (int i = 0;i < n - 1;i++) {
if (qs[i] > 0) {
// i -> i+1
adj[i].push_back(i + 1);
ans += qs[i] * (compress[i + 1] - compress[i]);
}
else if (qs[i] < 0) {
adj[i + 1].push_back(i);
}
qs[i + 1] += qs[i];
}
for (int i = 0;i < n;i++) {
if (!vis[i]) dfs(i, i);
}
for (int i = 0;i < n - 1;i++) {
e.push_back({ i, i + 1, compress[i + 1] - compress[i] });
}
sort(e.begin(), e.end());
for (auto& x : e) {
int pu = fr(x.u), pv = fr(x.v);
if (pu == pv) continue;
p[pu] = pv;
ans += x.w;
}
return ans;
}
컴파일 시 표준 에러 (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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |