제출 #1369894

#제출 시각아이디문제언어결과실행 시간메모리
1369894altayeb_132나일강 (IOI24_nile)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
vector<array<ll, 2>> diff;
map<ll, ll> ans;
vector<array<ll, 3>> edge;
long long cnt = 0;
struct dsu {
    vector<ll> p, sz;
    vector<array<ll, 2>> sm;
    dsu(int n, vector<ll> vl) {
        for (int i = 0; i < n; i++)
            sm.push_back({vl[i], vl[i]});
        n++;
        p.assign(n, 0);
        sz.assign(n, 1);
        iota(p.begin(), p.end(), 0);
    }
    int find(int u) {
        if (u == p[u])
            return u;
        return p[u] = find(p[u]);
    }
    void connect(int u, int v) {
        u = find(u);
        v = find(v);
        if (u == v)
            return;
        cnt -= sm[u][0] + sm[v][0];
        if (sz[u] % 2)
            cnt += sm[u][1];
        if (sz[v] % 2)
            cnt += sm[v][1];
        sz[v] += sz[u];
        p[u] = v;
        sm[v][0] += sm[u][0];
        sm[v][1] = min(sm[u][1], sm[v][1]);
        cnt += sm[v][0];
        if (sz[v] % 2)
            cnt -= sm[v][1];
    }
};
vector<long long> calculate_costs(vector<int> w, vector<int> a,vector<int> b, vector<int> e) {
    int n = w.size(),q = e.size();
    vector<long long> org;
    for (int i = 0; i < q; i++)
        org.push_back(e[i]);
    sort(e.begin(), e.end());
    ll fl = 0;
    vector<ll> tmp;
    for (int i = 0; i < n; i++) {
        fl += a[i];
        diff.push_back({w[i], a[i] - b[i]});
    }
    sort(diff.begin(), diff.end());
    for (int i = 0; i < n - 1; i++) {
        edge.push_back({diff[i + 1][0] - diff[i][0], i, i + 1});
    }
    for (int i = 0; i < n; i++)
        tmp.push_back(diff[i][1]);
    dsu ds(n, tmp);
    sort(edge.begin(), edge.end());
    int nw = 0;
    for (int i = 0; i < q; i++) {
        while (nw < n - 1 && e[i] >= edge[nw][0]) {
            ds.connect(edge[nw][1], edge[nw][2]);
            nw++;
        }
        ans[e[i]] = fl - cnt;
    }
    for (auto &i : org)
        i = ans[i];
    return org;
}

// #include "nile.h"
int main() {int N;assert(1 == scanf("%d", &N));std::vector<int> W(N), A(N), B(N);for (int i = 0; i < N; i++)assert(3 == scanf("%d%d%d", &W[i], &A[i], &B[i]));int Q;assert(1 == scanf("%d", &Q));std::vector<int> E(Q);for (int j = 0; j < Q; j++)assert(1 == scanf("%d", &E[j]));fclose(stdin);std::vector<long long> R = calculate_costs(W, A, B, E);int S = (int)R.size();for (int j = 0; j < S; j++)printf("%lld\n", R[j]);fclose(stdout);}

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/ccTkpMge.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccE1wh3r.o:nile.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status