Submission #1222447

#TimeUsernameProblemLanguageResultExecution timeMemory
1222447ereringTeleporters (IOI08_teleporters)C++20
100 / 100
597 ms39800 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);
    memset(adj,-1,sizeof adj);
    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({2e9,2e9});
    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;
        int x=i;
        while(1){
            sz++;
            vis[x]=1;
          //  cout<<vec[x].first<<' ';
            if(adj[x]==-1)break;
            if(vis[adj[x]]){
                flag=1;
                break;
            }
            x=adj[x];
        }
      //  cout<<endl<<flag<<'f'<<sz<<endl;
        if(flag)nigbig.pb(sz);
        else ans=sz-1;
    }
  //  cout<<ans<<'s'<<endl;
    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...