Submission #1137415

#TimeUsernameProblemLanguageResultExecution timeMemory
1137415gygRoller Coaster Railroad (IOI16_railroad)C++20
0 / 100
275 ms33212 KiB
#include "railroad.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define arr array
#define vec vector
#define pii pair<int, int>
#define fir first 
#define sec second
#define ub upper_bound 
const int N = 2e5 + 5, INF = 1e18;

int n;
arr<int, N> s, t;

struct Dsj {
    arr<int, N> prnt;
    void intl() {
        for (int u = 0; u <= n; u++) prnt[u] = u;
    }
    int pr(int u) {
        return (prnt[u] == u) ? u : prnt[u] = pr(prnt[u]);
    }
    void mrg(int u, int v) {
        u = pr(u), v = pr(v);
        assert(u != v);
        prnt[v] = u;
    }
} dsj;
set<pii> s_st, t_st;
int cmp() {
    dsj.intl();
    t_st.insert({1, 0});
    for (int i = 1; i <= n; i++)
        s_st.insert({s[i], i}), t_st.insert({t[i], i});
    t_st.erase(next(t_st.end(), -1));
    
    int ans = 0;
    while (t_st.size()) {
        int i = t_st.begin()->sec; t_st.erase(t_st.begin());

        auto it = s_st.begin();
        if (dsj.pr(it->sec) == dsj.pr(i)) it++;

        int j = it->sec; s_st.erase(it);
        ans += max(t[i] - s[j], 0ll);
        dsj.mrg(i, j);
        // cerr << i << " " << j << '\n';
    }
    return ans;
}

int plan_roller_coaster(vec<signed> _s, vec<signed> _t) {
    n = _s.size();
    for (int i = 1; i <= n; i++) s[i] = _s[i - 1], t[i] = _t[i - 1];

    int ans = cmp();
    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...