Submission #1199702

#TimeUsernameProblemLanguageResultExecution timeMemory
1199702raphaelpRoller Coaster Railroad (IOI16_railroad)C++20
0 / 100
69 ms9812 KiB
#include <bits/stdc++.h>
#include "railroad.h"
using namespace std;

long long plan_roller_coaster(vector<int> s, vector<int> t)
{
    int N = (int)s.size();
    vector<pair<int, int>> deb, fin;
    for (int i = 0; i < N; i++)
        deb.push_back({t[i], i}), fin.push_back({s[i], i});
    deb.push_back({1, N});
    fin.push_back({1000000000, N});
    sort(deb.begin(), deb.end());
    sort(fin.begin(), fin.end());
    long long best = 0;
    vector<int> cycle(N + 1, -1), inv(N + 1);
    for (int i = 0; i <= N; i++)
        inv[deb[i].second] = i;
    for (int i = 0; i <= N; i++)
        if (fin[i].first < deb[i].first)
            return 1;
    vector<vector<int>> cycles;
    for (int i = 0; i <= N; i++)
    {
        if (cycle[N] != -1)
            continue;
        cycles.push_back({});
        int x = inv[i];
        while (cycle[deb[x].second] == -1)
        {
            cycle[deb[x].second] = cycles.size() - 1;
            cycles.back().push_back(deb[x].second);
            x = inv[fin[x].second];
        }
    }
    int nb = cycles.size();
    int R = 0, c = 0;
    for (int i = 0; i <= N; i++)
    {
        if (deb[i].first <= R && cycle[deb[i].second] != c)
        {
            int c2 = cycle[deb[i].second];
            if (cycles[c2].size() > cycles[c].size())
                swap(c, c2);
            for (int j = 0; j < cycles[c2].size(); j++)
            {
                cycles[c].push_back(cycles[c2][j]);
                cycle[cycles[c2][j]] = c;
            }
            cycles[c2].clear();
            nb--;
        }
        R = fin[i].first;
        c = cycle[deb[i].second];
    }
    if (nb == 1)
        return 0;
    return 1;
}

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...