#include "railroad.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <cassert>
#define debug(x) #x << " = " << x << '\n'
using ll = long long;
const int INF = 1e9;
namespace DSU {
std::vector<int> p;
std::vector<int> sz;
void init(int n) {
p.resize(n + 1);
sz.resize(n + 1, 1);
for (int i = 0; i <= n; i++) {
p[i] = i;
}
}
int root(int u) {
return p[u] == u? u : p[u] = root(p[u]);
}
void join(int u, int v) {
u = root(u);
v = root(v);
if (u != v) {
p[u] = v;
sz[v] += sz[u];
}
}
bool isConnected() {
return sz[root(1)] == (int) p.size() - 1;
}
};
ll plan_roller_coaster(std::vector<int> s, std::vector<int> t) {
int n = (int) s.size();
std::vector<int> norm;
s.push_back(INF);
t.push_back(1);
for (int x : s) {
norm.push_back(x);
}
for (int x : t) {
norm.push_back(x);
}
std::sort(norm.begin(), norm.end());
norm.erase(std::unique(norm.begin(), norm.end()), norm.end());
for (int &x : s) {
x = std::lower_bound(norm.begin(), norm.end(), x) - norm.begin() + 1;
}
for (int &x : t) {
x = std::lower_bound(norm.begin(), norm.end(), x) - norm.begin() + 1;
}
int m = (int) norm.size();
std::vector<int> delta(m + 1, 0);
DSU::init(m);
for (int i = 0; i <= n; i++) {
if (s[i] <= t[i]) {
delta[s[i]]++;
delta[t[i]]--;
} else {
delta[t[i]]--;
delta[s[i]]++;
}
DSU::join(s[i], t[i]);
}
for (int i = 1; i <= m; i++) {
delta[i] += delta[i - 1];
}
for (int i = 0; i <= m; i++) {
if (delta[i] > 0) {
return 1;
}
if (delta[i] < 0) {
DSU::join(i, i + 1);
}
}
return 0;
if (DSU::isConnected()) {
return 0;
} else {
return 1;
}
}
컴파일 시 표준 에러 (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... |