Submission #1029535

#TimeUsernameProblemLanguageResultExecution timeMemory
102953512345678Teleporters (IOI08_teleporters)C++17
85 / 100
994 ms65536 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") using namespace std; const int nx=2e6+5; int n, m, u[nx], v[nx], p[nx], res, vs[nx]; set<pair<int, int>> s; priority_queue<int> pq; int main() { cin.tie(NULL)->sync_with_stdio(false); cin>>n>>m; for (int i=1; i<=n; i++) cin>>u[i]>>v[i], s.insert({u[i], i}), s.insert({v[i], i}); for (int i=1; i<=n; i++) { if (s.lower_bound(make_pair(v[i]+1, 0))==s.end()) p[i]=-1; else { auto tmp=*s.lower_bound(make_pair(v[i]+1, 0)); if (tmp.first==u[tmp.second]) p[i]=tmp.second; else p[i]=tmp.second+n; } if (s.lower_bound(make_pair(u[i]+1, 0))==s.end()) p[i+n]=-1; else { auto tmp=*s.lower_bound(make_pair(u[i]+1, 0)); if (tmp.first==u[tmp.second]) p[i+n]=tmp.second; else p[i+n]=tmp.second+n; } } int st=(*s.begin()).second; while (st!=-1) vs[st]=1, res++, st=p[st]; for (int i=1; i<=2*n; i++) { if (!vs[i]) { int sz=1, tmp=i; while (p[tmp]!=i) vs[tmp]=1, sz++, tmp=p[tmp]; vs[tmp]=1; pq.push(sz); } } while (m>0&&!pq.empty()) m--, res+=pq.top()+2, pq.pop(); res+=2*m; if (m%2) res--; cout<<res; }
#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...