Submission #1259692

#TimeUsernameProblemLanguageResultExecution timeMemory
1259692vietbachleonkroos2326Nile (IOI24_nile)C++20
17 / 100
2095 ms5052 KiB
#include<bits/stdc++.h>
#define TIME (1.0* clock()/CLOCKS_PER_SEC)
#define pb push_back
#define eb emplace_back
#define id1 (id<<1)
#define id2 (id<<1)|1
#define ll long long
#define ii pair<int,int>
#define vi vector<int>
#define vii vector<pair<int,int>> 
#define vl vector<long long>
#define vll vector <pair<ll,ll>>
#define li pair<long long,int>
#define vil vector <pair<int,ll>>
#define db double
#define ff first
#define ss second
#define lb lower_bound
#define ub upper_bound
#define FOR(i, a, b) for (int i = (a); i <=(b); i++)
#define F0R(i, a) FOR(i, 0, a-1)
#define ROF(i, a, b) for (int i = (b); i >= (a); i--)
#define R0F(i, a) ROF(i, 0, a-1)
#define rep(a) F0R(_, a)
#define each(a, x) for (auto &a : x)
#define ALL(x) (x).begin(),(x).end()
#define pq priority_queue <li, vector <li>, greater <li>> 
using namespace std;


struct DSU {
    vector<int> p;
    DSU(int n) : p(n) { iota(p.begin(), p.end(), 0); }
    int find(int x) { return x == p[x] ? x : p[x] = find(p[x]); }
    void unite(int a, int b) { p[find(b)] = find(a); }
};

vector<ll> calculate_costs(vector<int> W, vector<int> A, vector<int> B, vector<int> E) {
    int n = W.size(), q = E.size();
    vector<ll> res(q);
    vector<int> idx(n);
    iota(idx.begin(), idx.end(), 0);
    sort(idx.begin(), idx.end(), [&](int i, int j) { return W[i] < W[j]; });

    for (int qi = 0; qi < q; qi++) {
        int D = E[qi];
        DSU dsu(n);
        ll cost = 0;
        vector<bool> used(n);

        for (int i = 0; i < n; i++) {
            if (used[idx[i]]) continue;
            used[idx[i]] = true;
            cost += A[idx[i]];
            
            for (int j = i+1; j < n && W[idx[j]] - W[idx[i]] <= D; j++) {
                if (!used[idx[j]] && dsu.find(idx[i]) != dsu.find(idx[j])) {
                    used[idx[j]] = true;
                    cost += B[idx[i]] + B[idx[j]] - A[idx[i]];
                    dsu.unite(idx[i], idx[j]);
                    break;
                }
            }
        }
        res[qi] = cost;
    }
    return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...