제출 #1287132

#제출 시각아이디문제언어결과실행 시간메모리
1287132BlockOGTeleporters (IOI08_teleporters)C++20
100 / 100
228 ms16148 KiB
#include <bits/stdc++.h>

// mrrrow meeow :3
// go play vivid/stasis now! https://vividstasis.gay

#define fo(i, a, b) for (auto i = (a); i < (b); i++)
#define of(i, a, b) for (auto i = (b); i-- > (a);)
#define f first
#define s second
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define be(a) a.begin(), a.end()
using namespace std;

int ____init = [] {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    return 0;
}();

int conn[2000002];
int vis[2000003];
int sort1[4000001];

int main() {
    int n, m; cin >> n >> m;
    fo(i, 0, n) {
        int a, b; cin >> a >> b;
        conn[a] = b, conn[b] = a;
    }

    vis[2000002] = true;

    int res = 0;
    for (int j = 0; !vis[j];) {
        vis[j] = true;
        if (conn[j + 1]) j = conn[j + 1], res++; else j++;
    }

    fo(i, 1, 2000001) {
        if (vis[i]) continue;

        int conns = 0;
        for (int j = i; !vis[j];) {
            vis[j] = true;
            if (conn[j + 1]) j = conn[j + 1], conns++; else j++;
        }
        sort1[conns]++;
    }

    of(i, 1, 4000001) {
        while (m && sort1[i]) sort1[i]--, m--, res += 2 + i;
        if (!m) break;
    }

    cout << res + (m + 1) / 2 + m / 2 * 3;
}
#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...