Submission #583277

#TimeUsernameProblemLanguageResultExecution timeMemory
583277M_WTeleporters (IOI08_teleporters)C++17
100 / 100
856 ms57232 KiB
#include <bits/stdc++.h> #define ii pair<int, int> using namespace std; int pa[2000002], cnt[2000002], pos[2000002]; // i * 2 = st, i * 2 + 1 = ed; int in[1000001], out[1000001]; bool vis[2000002]; map<int, int> mp; int findpa(int a){ return pa[a] == a ? a : pa[a] = findpa(pa[a]); } void unset(int u, int v){ cnt[findpa(v)] += cnt[findpa(u)]; pa[findpa(u)] = findpa(v); } int main(){ int N, M; vector<ii> v; scanf("%d %d", &N, &M); for(int i = 1; i <= N; i++){ pa[i * 2] = i * 2; pa[i * 2 + 1] = i * 2 + 1; cnt[i * 2] = cnt[i * 2 + 1] = 1; scanf("%d %d", &in[i], &out[i]); v.push_back({in[i], i * 2}); v.push_back({out[i], i * 2 + 1}); } sort(v.begin(), v.end()); for(int i = 0; i < v.size(); i++) pos[v[i].first] = i; for(int i = 0; i < v.size(); i++){ if(vis[v[i].second]) continue; int cur = v[i].second; while(true){ vis[cur] = true; int find = cur & 1 ? in[cur >> 1] : out[cur >> 1]; int getpos = pos[find] + 1; ii newpos = v[getpos]; if(getpos == v.size() || vis[newpos.second]) break; unset(newpos.second, cur); cur = newpos.second; } } int ans = cnt[v[0].second]; priority_queue<int> pq; for(int i = 2; i <= (N * 2) + 1; i++){ if(pa[i] != i || i == v[0].second) continue; pq.push(cnt[i]); } while(!pq.empty() && M > 0){ ans += pq.top() + 2; pq.pop(); M--; } ans += (M / 2 * 4) + (M % 2); printf("%d", ans); }

Compilation message (stderr)

teleporters.cpp: In function 'int main()':
teleporters.cpp:30:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |  for(int i = 0; i < v.size(); i++) pos[v[i].first] = i;
      |                 ~~^~~~~~~~~~
teleporters.cpp:31:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   31 |  for(int i = 0; i < v.size(); i++){
      |                 ~~^~~~~~~~~~
teleporters.cpp:41:14: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |    if(getpos == v.size() || vis[newpos.second]) break;
      |       ~~~~~~~^~~~~~~~~~~
teleporters.cpp:21:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   21 |  scanf("%d %d", &N, &M);
      |  ~~~~~^~~~~~~~~~~~~~~~~
teleporters.cpp:25:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |   scanf("%d %d", &in[i], &out[i]);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
#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...