제출 #1325666

#제출 시각아이디문제언어결과실행 시간메모리
1325666kasamchiTeleporters (IOI08_teleporters)C++20
75 / 100
1098 ms79860 KiB
#include <bits/stdc++.h>
using namespace std;

int main() {
    // ios::sync_with_stdio(false);
    // cin.tie(0);

    int N, M;
    cin >> N >> M;

    vector<int> W(N), E(N);
    for (int i = 0; i < N; i++) {
        cin >> W[i] >> E[i];
    }

    set<pair<int, pair<int, int>>> st;
    for (int i = 0; i < N; i++) {
        st.insert(make_pair(W[i], make_pair(i, 0)));
        st.insert(make_pair(E[i], make_pair(i, 1)));
    }

    vector<int> szs;
    while (!st.empty()) {
        int pos = 0, cnt = 0;
        set<int> vis;
        while (true) {
            auto it = st.lower_bound(make_pair(pos, make_pair(N, 0)));
            if (it == st.end() || vis.count(it -> first)) {
                break;
            }
            vis.insert(it -> first);
            int i, d;
            tie(i, d) = it -> second;
            if (d == 0) {
                pos = E[i];
            } else {
                pos = W[i];
            }
            cnt++;
        }
        for (int x : vis) {
            st.erase(st.lower_bound(make_pair(x, make_pair(0, 0))));
        }
        szs.push_back(cnt);
    }
    sort(szs.begin() + 1, szs.end(), greater<>());

    if (M >= szs.size() - 1) {
        cout << (N + M) * 2 - (M - szs.size() + 1) % 2 << '\n';
    } else {
        int ans = szs[0];
        for (int i = 1; i <= M; i++) {
            ans += szs[i];
        }
        cout << ans + M * 2 << '\n';
    }
}
#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...