제출 #1029534

#제출 시각아이디문제언어결과실행 시간메모리
102953412345678Teleporters (IOI08_teleporters)C++17
85 / 100
952 ms65536 KiB
#include <bits/stdc++.h> using namespace std; const int nx=1e6+5; int n, m, u[nx], v[nx], p[2*nx], res, vs[2*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; } } //cout<<"debug\n"; //for (int i=1; i<=n;i ++) cout<<i<<' '<<p[i]<<' '<<p[i+n]<<'\n'; int st=(*s.begin()).second; //cout<<"st "<<st<<'\n'; while (st!=-1) vs[st]=1, res++, st=p[st]; //cout<<"vs "; //for (int i=1 ;i<=2*n; i++) cout<<vs[i]<<' '; //cout<<'\n'; 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); //cout<<"here "<<i<<' '<<sz<<'\n'; } } 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...