Submission #54075

#TimeUsernameProblemLanguageResultExecution timeMemory
54075imeimi2000Teleporters (IOI08_teleporters)C++17
90 / 100
1082 ms26040 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]; int comp[2000000]; int to[2000000]; bool visited[2000001]; int arr[2000000]; int find(int x) { int s = 0, e = n << 1; while (s <= e) { int m = (s + e) / 2; if (comp[m] == x) return m; if (comp[m] < x) s = m + 1; else e = m - 1; } } 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] = s[i]; comp[i << 1 | 1] = e[i]; } comp[n << 1] = 0; sort(comp, comp + (n << 1 | 1)); for (int i = 0; i < n; ++i) { s[i] = find(s[i]); e[i] = find(e[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; }

Compilation message (stderr)

teleporters.cpp: In function 'int find(int)':
teleporters.cpp:37:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
#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...