Submission #1222436

#TimeUsernameProblemLanguageResultExecution timeMemory
1222436ereringTeleporters (IOI08_teleporters)C++20
55 / 100
702 ms131072 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'
vector<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(n*2+1);
    for(int i=0;i<n;i++){
        cin>>p[i].first>>p[i].second;
        vec[i*2]={p[i].first,p[i].second};
        vec[i*2+1]={p[i].second,p[i].first};
    }
    vec[n*2]={2e18,2e18};
    sort(vec.begin(),vec.end());
    for(int i=0;i<vec.size()-1;i++){
        int y=vec[i].second;
     //   cout<<vec[i].first<<' '<<vec[i].second<<endl;
      //  while(vec[right].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].pb(l);
    }
    int ans=0,cnt=0;
    vector<int> nigbig(vec.size()-1);
    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;
            for(auto j:adj[x])q.push(j);
        }
        if(flag)nigbig[cnt++]=sz;
        else ans=sz-1;
    }
    sort(nigbig.begin(),nigbig.end());
    for(int i=nigbig.size()-1;i>=0 && m>0;i--){
        ans+=nigbig[i]+2;
        m--;
    }
    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...