Submission #1029538

#TimeUsernameProblemLanguageResultExecution timeMemory
102953812345678Teleporters (IOI08_teleporters)C++17
85 / 100
937 ms65536 KiB
#include <bits/stdc++.h>

#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")

using namespace std;

const int nx=1e6+5;

int n, m, u[nx], v[nx], p[2*nx], res, vs[nx];
set<pair<int, int>> s;
priority_queue<int> pq;

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>n>>m;
    for (int i=1; i<=n; i++) cin>>u[i]>>v[i], s.insert({u[i], i}), s.insert({v[i], i+n});
    for (int i=1; i<=n; i++)
    {
        auto itr=s.lower_bound(make_pair(v[i]+1, 0));
        if (s.lower_bound(make_pair(v[i]+1, 0))==s.end()) p[i]=-1;
        else p[i]=itr->second;
        itr=s.lower_bound(make_pair(u[i]+1, 0));
        p[i+n]=itr->second;
    }
    int st=(*s.begin()).second;
    while (st!=-1) vs[st]=1, res++, st=p[st];
    s.clear();
    for (int i=1; i<=2*n; i++)
    {
        if (!vs[i])
        {
            int sz=1, tmp=i;
            while (p[tmp]!=i) vs[tmp]=1, sz++, tmp=p[tmp];
            vs[tmp]=1;
            pq.push(sz); 
        }
    }
    while (m>0&&!pq.empty()) m--, res+=pq.top()+2, pq.pop();
    res+=2*m;
    if (m%2) res--;
    cout<<res;
}
#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...