Submission #1222437

#TimeUsernameProblemLanguageResultExecution timeMemory
1222437ereringTeleporters (IOI08_teleporters)C++20
55 / 100
545 ms39912 KiB
#include <bits/stdc++.h>
using namespace std;
//#define int long long
const int N=2e6+5,MOD=998244353;
#define pb push_back
#define endl '\n'
int adj[N];
int sz=0;
vector<bool> vis(N);
bool flag=0;
signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int n,m; cin>>n>>m;
    pair<int,int> p[n];
    vector<pair<int,int>> vec;
    for(int i=0;i<n;i++){
        cin>>p[i].first>>p[i].second;
        vec.pb({p[i].first,p[i].second}); vec.pb({p[i].second,p[i].first});
    }
    vec.pb({2e18,2e18});
    sort(vec.begin(),vec.end());
    int right=0;
    for(int i=0;i<vec.size()-1;i++){
        int y=vec[i].second;
        int l=0,r=vec.size()-1;
        while(l<r){
            int mid=(l+r)/2;
            if(vec[mid].first>y)r=mid;
            else l=mid+1;
        }
        adj[i]=(l);
    }
    int ans=0;
    vector<int> nigbig;
    for(int i=0;i<vec.size()-1;i++){
        if(vis[i])continue;
        flag=0;
        sz=0;
        queue<int> q; q.push(i);
        while(!q.empty()){
            int x=q.front();
            q.pop();
            if(vis[x]){
                flag=1;
                continue;
            }
            sz++;
            vis[x]=1;
            q.push(adj[x]);
        }
        if(flag)nigbig.pb(sz);
        else ans=sz-1;
    }
    //   cout<<ans<<' '<<sz<<endl;
    sort(nigbig.begin(),nigbig.end());
    for(int i=nigbig.size()-1;i>=0 && m>0;i--){
        ans+=nigbig[i]+2;
        m--;
    }
    // cout<<ans<<endl;
    ans+=m/2*4;
    if(m%2)ans++;
    cout<<ans;
}
#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...