Submission #1179321

#TimeUsernameProblemLanguageResultExecution timeMemory
1179321shirokitoStove (JOI18_stove)C++20
0 / 100
1 ms328 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define el '\n'

const int N = 1e5 + 24;

struct Edge { int u, v; ll w; }; 

int n, k, a[N];

int par[N], sz[N], mn[N], mx[N];

int find(int v) {
    return (par[v] == v ? v : par[v] = find(par[v]));
}

bool merge(int u, int v) {
    u = find(u); v = find(v);
    if (u == v) return 0;
    else {
        if (sz[u] < sz[v]) swap(u, v);
        par[v] = u; sz[u] += sz[v];
        mn[u] = min(mn[u], mn[v]);
        mx[u] = max(mx[u], mx[v]);
        return 1;
    }
}

void solve() {
	cin >> n >> k;
    for (int i = 1; i <= n; i++) cin >> a[i];

    sort(a + 1, a + n + 1);
    for (int i = 1; i <= n; i++) {
        par[i] = i; sz[i] = 1;
        mn[i] = mx[i] = a[i];
    } 

    vector<Edge> e;
    for (int i = 1; i < n; i++) {
        e.push_back({i, i + 1, a[i + 1] - a[i]});
    }
    sort(e.begin(), e.end(), [](Edge x, Edge y) { 
        return x.w < y.w;
    });

    int cnt = n;
    for (auto [u, v, w]: e) {
        merge(u, v);
        cnt--; if (cnt == k) break;
    }

    ll res = 0;
    for (int i = 1; i <= n; i++) {
        if (find(i) == i) res += mx[i] - mn[i] + 1;
    }
    cout << res << el;
}

signed main() {
    cin.tie(0) -> sync_with_stdio(0);

    #define task "STOVE"
    if (fopen(task".inp", "r")) {
        freopen(task".inp", "r", stdin);
        freopen(task".out", "w", stdout);
    }

    int T = 1; // cin >> T;
    while (T--) solve();
}

Compilation message (stderr)

stove.cpp: In function 'int main()':
stove.cpp:66:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   66 |         freopen(task".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
stove.cpp:67:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   67 |         freopen(task".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...