제출 #906647

#제출 시각아이디문제언어결과실행 시간메모리
906647JakobZorzTeleporters (IOI08_teleporters)C++17
100 / 100
227 ms28220 KiB
#include<iostream>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
#include<limits.h>
#include<math.h>
#include<map>
#include<set>
#include<unordered_map>
#include<unordered_set>
#include<iomanip>
#include<cstring>
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
using namespace std;

void solve(){
    int n,m;
    cin>>n>>m;
    vector<int>nxt(2e6,-1);
    vector<bool>vis(2e6);
    for(int i=0;i<n;i++){
        int a,b;
        cin>>a>>b;
        a--;b--;
        nxt[a]=b+1;
        nxt[b]=a+1;
    }
    
    priority_queue<int>q;
    int ms=-1;
    for(int i=0;i<2e6;i++){
        if(vis[i])
            continue;
        int curr=i;
        int size=0;
        while(curr<2e6&&!vis[curr]){
            vis[curr]=true;
            if(nxt[curr]==-1)
                curr++;
            else{
                curr=nxt[curr];
                size++;
            }
        }
        if(ms==-1)
            ms=size;
        else
            q.push(size);
    }
    
    while(m&&q.size()){
        ms+=q.top()+2;
        m--;
        q.pop();
    }
    cout<<ms+m+m/2*2<<"\n";
}
 
int main(){
    ios::sync_with_stdio(false);cout.tie(NULL);cin.tie(NULL);
    //freopen("input.in","r",stdin);freopen("output.out","w",stdout);
    int t=1;//cin>>t;
    while(t--)solve();
    return 0;
}

/*
 
3
1
10 11
1 4
2 3

6
 
 
 
3
3
5 7
6 10
1999999 2000000
 
12
 

 */
#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...