Submission #555610

#TimeUsernameProblemLanguageResultExecution timeMemory
555610alextodoranTeleporters (IOI08_teleporters)C++17
100 / 100
339 ms30936 KiB
/**
 ____ ____ ____ ____ ____
||a |||t |||o |||d |||o ||
||__|||__|||__|||__|||__||
|/__\|/__\|/__\|/__\|/__\|

**/

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int X_MAX = 2000000;

int N, M;

int to[X_MAX + 2];
bool tel[X_MAX + 2];

bool seen[X_MAX + 2];
int dfs (int s) {
    int u = s;
    int cnt = 0;
    do {
        cnt += tel[u];
        seen[u] = true;
        u = to[u];
    } while (u != X_MAX + 1 && u != s);
    return cnt;
}

int main () {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin >> N >> M;
    for (int u = 0; u <= X_MAX; u++) {
        to[u] = u + 1;
    }
    for (int i = 1; i <= N; i++) {
        int u, v;
        cin >> u >> v;
        to[u - 1] = v; tel[u - 1] = true;
        to[v - 1] = u; tel[v - 1] = true;
    }

    vector <int> v;
    for (int u = 0; u <= X_MAX; u++) {
        if (seen[u] == false) {
            v.push_back(dfs(u));
        }
    }
    sort(v.begin() + 1, v.end(), greater <int> ());
    int score = v.front();
    int join = min((int) v.size() - 1, M);
    M -= join;
    for (int i = 1; i <= join; i++) {
        score += 2 + v[i];
    }
    score += (M / 2) * (1 + 3);
    score += (M % 2) * 1;
    cout << score << "\n";

    return 0;
}
#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...