Submission #649240

#TimeUsernameProblemLanguageResultExecution timeMemory
649240Spade1Teleporters (IOI08_teleporters)C++14
100 / 100
432 ms40568 KiB
#include<bits/stdc++.h>
#define pii pair<int, int>
#define pll pair<long long, long long>
#define ll long long
#define ld long double
#define st first
#define nd second
#define pb push_back
#define INF INT_MAX
using namespace std;

const int N = 2e6 + 10;

int to[N];
int cnt[N], srt[N];
bool vis[N];
vector<pii> tp;

void solve() {
    int n, m; cin >> n >> m;
    for (int i = 0; i < n; ++i) {
        int a, b; cin >> a >> b;
        cnt[a]++;
        cnt[b]++;
        tp.pb({a, b});
    }

    for (int i = 1; i < N; ++i) {
        cnt[i] += cnt[i-1];
    }

    for (auto [a, b] : tp) {
        to[cnt[a-1]] = cnt[b];
        to[cnt[b-1]] = cnt[a];
    }

    int ans = 0;
    for (int i = 0; i < 2*n; ++i) {
        if (vis[i]) continue;
        int cntt = 0;
        while (!vis[i]) {
            vis[i] = 1;
            cntt++;
            i = to[i];
        }
        if (i == 0) {
            ans = cntt;
        }
        else srt[cntt]++;
    }

    for (int i = N-1; i > 0; --i) {
        if (srt[i] <= m) {
            m -= srt[i];
            ans += (srt[i]*i) + 2*srt[i];
        }
        else {
            ans += m*i + 2*m;
            m = 0;
            break;
        }
    }

    if (m > 0) {
        if (m&1) {
            ans += 2*(m-1)+1;
        }
        else {
            ans += 2*m;
        }
    }

    cout << ans-1 << '\n';
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(NULL);
    int t = 1;
//    cin >> t;
    while (t--) {
        solve();
    }
}

Compilation message (stderr)

teleporters.cpp: In function 'void solve()':
teleporters.cpp:32:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   32 |     for (auto [a, b] : tp) {
      |               ^
#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...
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...