Submission #410444

#TimeUsernameProblemLanguageResultExecution timeMemory
410444JasiekstrzTeleporters (IOI08_teleporters)C++17
80 / 100
1041 ms65540 KiB
#include<bits/stdc++.h> #define fi first #define se second using namespace std; const int N=1e6; struct Point { int x,id; bool en; Point(int _x=0,int _id=0,int _en=0) : x(_x),id(_id),en(_en) {}; bool operator<(const Point &oth) const { return x<oth.x; } }; array<int,2> t[N+10]; bool vis[N+10][2]; set<Point> st; vector<int> siz; int dfs(set<Point>::iterator x) { int ans=0; while(x!=st.end() && !vis[(x->id)][(x->en)]) { vis[(x->id)][(x->en)]=true; ans++; x=next(st.find(Point(t[(x->id)][!(x->en)],(x->id),!(x->en)))); } return ans; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n,m; cin>>n>>m; for(int i=1;i<=n;i++) { cin>>t[i][0]>>t[i][1]; st.insert(Point(t[i][0],i,0)); st.insert(Point(t[i][1],i,1)); } int ans=dfs(st.begin()); for(int i=1;i<=n;i++) { for(int j:{0,1}) { if(!vis[i][j]) siz.push_back(dfs(st.find(Point(t[i][j],i,j)))); } } sort(siz.begin(),siz.end()); while(m--) { if(siz.empty()) { ans++; siz.push_back(1); } else { ans+=2+siz.back(); siz.pop_back(); } } 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...