제출 #1333752

#제출 시각아이디문제언어결과실행 시간메모리
1333752yc11Stove (JOI18_stove)C++20
100 / 100
20 ms4412 KiB
#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<int> p;
int c;

int f(int x){
    if (x==p[x]) return x;
    return p[x] = f(p[x]);
    }
bool u(int x, int y){
    if (f(x)==f(y)) return false;

    p[f(x)] = p[f(y)];
    c--;
    return true;
    }

signed main(){
  ios_base::sync_with_stdio(false);
  cin.tie(0);
    int n,k;
    cin>>n>>k;
    c = n;
    vector<pair<int,pair<int,int> > > n2;
    vector<int> n1;
    n1.resize(n);
    for (int i = 0;i<n;i++){
        cin>>n1[i];
    }

    for (int i = 1;i<n;i++){

        n2.push_back(make_pair(n1[i]-n1[i-1],make_pair(i-1,i)));
    }

    sort(n2.begin(),n2.end());
 
    p.resize(n);
    for (int i = 0;i<n;i++) p[i] = i;
    int ans = 0;

    for (int i = 0;i<n-1;i++){
        if (c==k) break;
        if (u(n2[i].second.first,n2[i].second.second)){
            ans = ans+n2[i].first;
        }
     
        if (c==k) break;
    }
    cout<<ans+c;
    return 0;
    }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...