Submission #1222432

#TimeUsernameProblemLanguageResultExecution timeMemory
1222432m5588ohammedTeleporters (IOI08_teleporters)C++20
80 / 100
1098 ms117708 KiB
#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define mod 1000000007
int n,m,ans;
int p[2000005],v[2000005];
bool vis[2000005];
map <int,int> idx;
vector <int> telp;
vector <int> qu;
void solve(int i,int cnt){
    vis[i]=1;
    if(v[i]==-1) {ans+=cnt-1;return;}
    if(vis[v[i]]==1) qu.push_back(cnt);
    else solve(v[i],cnt+1);
    return;
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    memset(v,-1,sizeof v);
    cin>>n>>m;
    for(int i=0;i<n;i++){
        int a,b;
        cin>>a>>b;
        telp.push_back(a);
        telp.push_back(b);
        p[a]=b;
        p[b]=a;
    }
    sort(telp.begin(),telp.end());
    for(int j=0;j<telp.size();j++) idx[telp[j]]=j+1;
    v[0]=idx[p[telp[0]]];
    for(int j=1;j<telp.size();j++){
        v[j]=idx[p[telp[j]]];
    }
    for(int i=0;i<=n*2+1;i++){
        if(vis[i]==0){
            solve(i,1);
        }
    }
    sort(qu.begin(),qu.end());
    for(int i=qu.size()-1;i>=max(0,(int)qu.size()-m);i--){
        ans+=qu[i]+2;
    }
    if(qu.size()<m){
        m-=qu.size();
        ans+=(m/2)*4;
        if(m%2==1) ans++;
    }
    cout<<ans<<endl;
    return 0;
}
//g++ -std=c++17 template.cpp -o executable.exe
#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...