제출 #1219595

#제출 시각아이디문제언어결과실행 시간메모리
1219595HappyCapybaraRoller Coaster Railroad (IOI16_railroad)C++20
30 / 100
567 ms61692 KiB
#include "railroad.h"
#include<bits/stdc++.h>
using namespace std;

#define ll long long

vector<int> p;

int find(int a){
    if (a == p[a]) return p[a];
    return p[a] = find(p[a]);
}

ll plan_roller_coaster(vector<int> s, vector<int> t){
    ll res = 0;
    int n = s.size();
    n++;
    s.push_back(pow(10, 9));
    t.push_back(1);
    set<int> cc;
    for (int i=0; i<n; i++){
        cc.insert(s[i]);
        cc.insert(t[i]);
    }
    int z = cc.size();
    vector<int> v(z);
    map<int,int> m;
    int cur = 0;
    for (int x : cc){
        m[x] = cur;
        v[cur] = x;
        cur++;
    }
    vector<int> imb(z, 0);
    vector<pair<ll,pair<int,int>>> e;
    for (int i=0; i<n; i++){
        s[i] = m[s[i]];
        t[i] = m[t[i]];
        e.push_back({0, {s[i], t[i]}});
        imb[s[i]]++;
        imb[t[i]]--;
    }
    for (int i=0; i<z-1; i++){
        if (i > 0) imb[i] += imb[i-1];
        if (imb[i] > 0){
            res += v[i+1]-v[i];
            e.push_back({0, {i, i+1}});
        }
        if (imb[i] < 0){
            e.push_back({0, {i, i+1}});
        }
    }
    for (int i=0; i<z-1; i++) e.push_back({v[i+1]-v[i], {i, i+1}});
    p.resize(z);
    for (int i=0; i<z; i++) p[i] = i;
    sort(e.begin(), e.end());
    for (pair<ll,pair<int,int>> x : e){
        int a = find(x.second.first), b = find(x.second.second);
        if (a == b) continue;
        res += x.first;
        p[b] = a;
    }
    return res;
}

컴파일 시 표준 에러 (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...