제출 #583268

#제출 시각아이디문제언어결과실행 시간메모리
583268M_WTeleporters (IOI08_teleporters)C++17
70 / 100
1018 ms53164 KiB
#include <bits/stdc++.h> #define ii pair<int, int> using namespace std; int pa[2000002], cnt[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++){ 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]; auto it = upper_bound(v.begin(), v.end(), make_pair(find, INT_MAX)); if(it == v.end() || vis[(*it).second]) break; unset((*it).second, cur); cur = (*it).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) + (M % 2); printf("%d", ans); }

컴파일 시 표준 에러 (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++){
      |                 ~~^~~~~~~~~~
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...