Submission #95028

#TimeUsernameProblemLanguageResultExecution timeMemory
95028Retro3014Teleporters (IOI08_teleporters)C++17
65 / 100
720 ms66560 KiB
#include <iostream> #include <algorithm> #include <vector> #include <stdio.h> #define MAX_X 2000000 using namespace std; typedef long long ll; int N, M; struct S{ S(int x, int y) : x(x), y(y) {} int x, y; }; vector<S> v; int g[MAX_X+1]; vector<int> v2; int l[MAX_X+1], r[MAX_X+1]; bool vst[MAX_X+1]; vector<ll> cycle; ll ans; void dfs(int x, ll y){ if(vst[x]){ cycle.push_back(y); return; } vst[x] = true; if(x==v2.size()-1){ ans+=y; return; } dfs(r[x], y+1); } int main(){ scanf("%d%d", &N, &M); for(int i=0; i<N; i++){ int a, b; scanf("%d%d", &a, &b); v.push_back({a, b}); v2.push_back(a); v2.push_back(b); } v2.push_back(0); sort(v2.begin(), v2.end()); for(int i=0; i<v2.size(); i++){ g[v2[i]] = i; } for(int i=0; i<v.size(); i++){ S now = v[i]; r[g[now.x]-1] = g[now.y]; l[g[now.x]] = g[now.y]-1; r[g[now.y]-1] = g[now.x]; l[g[now.y]] = g[now.x]-1; } for(int i=0; i<v2.size(); i++){ if(vst[i]) continue; dfs(i, 0); } /*printf("%d\n", ans); for(int i=0; i<cycle.size(); i++){ printf("%d\n", cycle[i]); }*/ sort(cycle.begin(), cycle.end()); while(M--){ if(cycle.empty()){ cycle.push_back(2); }else{ ans+=2+cycle.back(); cycle.pop_back(); } } printf("%lld", ans); return 0; }

Compilation message (stderr)

teleporters.cpp: In function 'void dfs(int, ll)':
teleporters.cpp:29:6: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  if(x==v2.size()-1){
     ~^~~~~~~~~~~~~
teleporters.cpp: In function 'int main()':
teleporters.cpp:44:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<v2.size(); i++){
               ~^~~~~~~~~~
teleporters.cpp:47:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<v.size(); i++){
               ~^~~~~~~~~
teleporters.cpp:54:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0; i<v2.size(); i++){
               ~^~~~~~~~~~
teleporters.cpp:37:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d", &N, &M);
  ~~~~~^~~~~~~~~~~~~~~~
teleporters.cpp:39:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   int a, b; scanf("%d%d", &a, &b);
             ~~~~~^~~~~~~~~~~~~~~~
#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...