제출 #1230550

#제출 시각아이디문제언어결과실행 시간메모리
1230550brito.joaoColouring a rectangle (eJOI19_colouring)C++20
컴파일 에러
0 ms0 KiB
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstddef>

using namespace std;

const long long X = 1e18;

struct E {
    int t;
    long long c;
    int r;
};

vector<vector<E>> a;
vector<int> l;
vector<size_t> it;

vector<pair<int, int>> s;
vector<int> v;

void ae(int u, int t, long long c) {
    a[u].push_back({t, c, (int)a[t].size()});
    a[t].push_back({u, 0, (int)a[u].size() - 1});
}

bool b(int s, int t) {
    l.assign(a.size(), -1);
    vector<int> q;
    q.push_back(s);
    l[s] = 0;
    size_t h = 0;
    while (h < q.size()) {
        int u = q[h++];
        for (auto& e : a[u]) {
            if (e.c > 0 && l[e.t] < 0) {
                l[e.t] = l[u] + 1;
                q.push_back(e.t);
            }
        }
    }
    return l[t] != -1;
}

long long d(int u, int t, long long f) {
    if (u == t) return f;
    for (size_t& i = it[u]; i < a[u].size(); ++i) {
        E& e = a[u][i];
        if (e.c > 0 && l[u] < l[e.t]) {
            long long x = d(e.t, t, min(f, e.c));
            if (x > 0) {
                e.c -= x;
                a[e.t][e.r].c += x;
                return x;
            }
        }
    }
    return 0;
}

long long mf(int s, int t) {
    long long f = 0;
    while (b(s, t)) {
        it.assign(a.size(), 0);
        long long x;
        while ((x = d(s, t, X)) > 0) f += x;
    }
    return f;
}

int bst(int l, int r, int& ni, int b) {
    int u = ni++;
    s.emplace_back(-1, -1);
    if (l == r) {
        ae(u, v[l], X);
    } else {
        int m = l + (r - l) / 2;
        int c1 = bst(l, m, ni, b);
        int c2 = bst(m + 1, r, ni, b);
        s[u - b] = {c1, c2};
        ae(u, c1, X);
        ae(u, c2, X);
    }
    return u;
}

void qst(int ni, int b, int l, int r, int ql, int qr, int u) {
    if (ql > r || qr < l) return;
    if (ql <= l && r <= qr) {
        ae(u, ni, X);
        return;
    }
    int m = l + (r - l) / 2;
    auto c = s[ni - b];
    if (c.first != -1) {
        qst(c.first, b, l, m, ql, qr, u);
        qst(c.second, b, m + 1, r, ql, qr, u);
    }
}

long long sp(int m, int n, const vector<long long>& c1, const vector<long long>& c2, int p) {
    vector<long long> x1, x2;
    vector<int> i1, i2;

    for (int i = 1 - n; i <= m - 1; ++i) {
        if (abs(i % 2) == p) {
            i1.push_back(i);
            x1.push_back(c1[i + n - 1]);
        }
    }
    for (int j = 0; j <= m + n - 2; ++j) {
        if (j % 2 == p) {
            i2.push_back(j);
            x2.push_back(c2[j]);
        }
    }

    if (x1.empty() || x2.empty()) return 0;

    size_t u = x1.size();
    size_t v_ = x2.size();
    size_t s_ = 4 * v_;
    size_t tot = 2 + u + v_ + s_;

    a.assign(tot, vector<E>());
    const int S = 0, T = 1;
    vector<int> uu(u);
    v.assign(v_, 0);

    int ni = 2;
    for (size_t i = 0; i < u; ++i) uu[i] = ni++;
    for (size_t i = 0; i < v_; ++i) v[i] = ni++;

    for (size_t i = 0; i < u; ++i) ae(S, uu[i], x1[i]);
    for (size_t i = 0; i < v_; ++i) ae(v[i], T, x2[i]);

    s.clear();
    int b = ni;
    int rt = bst(0, v_ - 1, ni, b);
    for (size_t i = 0; i < u; ++i) {
        int l = i1[i] + n - 1;
        int lo = max(0, l - m + 1);
        int hi = min(l, n - 1);
        qst(rt, b, 0, v_ - 1, lo, hi, uu[i]);
    }

    return mf(S, T);
}

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

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crt1.o: in function `_start':
(.text+0x1b): undefined reference to `main'
collect2: error: ld returned 1 exit status