Submission #54080

#TimeUsernameProblemLanguageResultExecution timeMemory
54080imeimi2000Teleporters (IOI08_teleporters)C++17
100 / 100
577 ms34160 KiB
#include <iostream> #include <algorithm> #include <vector> #include <queue> #include <deque> #include <set> #include <map> #include <unordered_map> #include <functional> #include <cstring> #include <cmath> #include <ctime> #include <cstdlib> using namespace std; typedef long long llong; typedef long double ld; typedef pair<int, int> pii; typedef pair<llong, llong> pll; int n, m; int s[1000000]; int e[1000000]; pii comp[2000000]; int to[2000000]; bool visited[2000001]; int arr[2000000]; int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> m; for (int i = 0; i < n; ++i) { cin >> s[i] >> e[i]; comp[i << 1 | 0] = pii(s[i], i << 1 | 0); comp[i << 1 | 1] = pii(e[i], i << 1 | 1); } sort(comp, comp + (n << 1)); for (int i = 0; i < (n << 1); ++i) { if (comp[i].second & 1) e[comp[i].second >> 1] = i + 1; else s[comp[i].second >> 1] = i + 1; } for (int i = 0; i < n; ++i) { to[s[i]] = e[i]; to[e[i]] = s[i]; } visited[n << 1] = 1; int sz = -1; for (int i = 0; i < (n << 1); ++i) { if (visited[i]) continue; int x = to[i + 1]; visited[i] = 1; int s = 1; while (!visited[x]) { visited[x] = 1; x = to[x + 1]; ++s; } if (sz != -1) ++arr[s]; else sz = s; } for (int i = 2 * n - 1; i > 0 && m > 0; --i) { while (arr[i] > 0 && m > 0) { sz += i + 2; --arr[i]; --m; } } printf("%d\n", sz + ((m >> 1) << 2) + (m & 1)); 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...