Submission #649240

#TimeUsernameProblemLanguageResultExecution timeMemory
649240Spade1Teleporters (IOI08_teleporters)C++14
100 / 100
432 ms40568 KiB
#include<bits/stdc++.h> #define pii pair<int, int> #define pll pair<long long, long long> #define ll long long #define ld long double #define st first #define nd second #define pb push_back #define INF INT_MAX using namespace std; const int N = 2e6 + 10; int to[N]; int cnt[N], srt[N]; bool vis[N]; vector<pii> tp; void solve() { int n, m; cin >> n >> m; for (int i = 0; i < n; ++i) { int a, b; cin >> a >> b; cnt[a]++; cnt[b]++; tp.pb({a, b}); } for (int i = 1; i < N; ++i) { cnt[i] += cnt[i-1]; } for (auto [a, b] : tp) { to[cnt[a-1]] = cnt[b]; to[cnt[b-1]] = cnt[a]; } int ans = 0; for (int i = 0; i < 2*n; ++i) { if (vis[i]) continue; int cntt = 0; while (!vis[i]) { vis[i] = 1; cntt++; i = to[i]; } if (i == 0) { ans = cntt; } else srt[cntt]++; } for (int i = N-1; i > 0; --i) { if (srt[i] <= m) { m -= srt[i]; ans += (srt[i]*i) + 2*srt[i]; } else { ans += m*i + 2*m; m = 0; break; } } if (m > 0) { if (m&1) { ans += 2*(m-1)+1; } else { ans += 2*m; } } cout << ans-1 << '\n'; } int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); int t = 1; // cin >> t; while (t--) { solve(); } }

Compilation message (stderr)

teleporters.cpp: In function 'void solve()':
teleporters.cpp:32:15: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   32 |     for (auto [a, b] : tp) {
      |               ^
#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...