Submission #999071

#TimeUsernameProblemLanguageResultExecution timeMemory
999071huutuanTeleporters (IOI08_teleporters)C++14
75 / 100
547 ms42728 KiB
#include<bits/stdc++.h>

using namespace std;

const int N=3e6+10;
int n, m, vis[N], nxt[N];
pair<int, int> a[N];

int32_t main(){
   ios_base::sync_with_stdio(false);
   cin.tie(nullptr);
   cin >> n >> m;
   vector<int> vv{0};
   for (int i=1; i<=n; ++i){
      cin >> a[i].first >> a[i].second;
      vv.push_back(a[i].first); vv.push_back(a[i].second);
   }
   sort(vv.begin(), vv.end());
   for (int i=1; i<=n; ++i){
      a[i].first=lower_bound(vv.begin(), vv.end(), a[i].first)-vv.begin();
      a[i].second=lower_bound(vv.begin(), vv.end(), a[i].second)-vv.begin();
      nxt[a[i].first-1]=a[i].second;
      nxt[a[i].second-1]=a[i].first;
   }
   int ans=0;
   vector<int> v;
   for (int i=0; i<=(int)vv.size(); ++i) if (!vis[i]){
      int u=i, cnt=0;
      while (!vis[u]){
         vis[u]=1;
         ++cnt;
         u=nxt[u];
      }
      if (!i) ans+=cnt-1;
      else v.push_back(cnt);
   }
   sort(v.rbegin(), v.rend());
   for (auto &i:v){
      if (m){
         --m;
         ans+=i+2;
      }
   }
   while (m){
      --m; ++ans;
      if (m) --m, ans+=3;
   }
   cout << ans << '\n';
   return 0;
}
#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...